1

我有一个带有密码字段的表,它是纯文本。现在,我想加密该字段。怎么做 ?

4

7 回答 7

3

MySQL 具有广泛的内置加密功能,您可以在此处找到详细概述。

您可能想看看例如 AES_DECRYPT() 和 AES_ENCRYPT()。

INSERT INTO table (mycolumn) VALUES(AES_ENCRYPT('Hello!', 'encryption_key'));
SELECT AES_DECRYPT(mycolumn, 'encryption_key') FROM table;
于 2012-06-27T12:09:23.340 回答
2
alter table tableName  modify columnNameToBeEncrypted varbinary(200);
update tableName 
set columnNameToBeEncrypted = aes_encrypt(tableName.columnNameToBeEncrypted, 'secretyKey');

首先将要加密的列更新为varbinary类型。这将启用加密值的保存。
然后更新表以将加密值存储在适当的位置,如上所示。这会将加密的值保存在表中。

要查看此值,请使用以下查询:

select *, CAST(aes_decrypt(columnNameToBeEncrypted, 'secretyKey') AS CHAR(40)) from tableName;

以上SQL查询已在MySQL.

于 2018-01-19T19:46:07.587 回答
1

将您的数据库(仅数据)备份为 csv 文件。使用以下查询使用键更新现有字段:

LOAD DATA INFILE 'C:/Sample.csv' INTO TABLE myTable(myname,@mypass) SET mypass=AES_ENCRYPT(@mypass,'key:test');

希望它能解决你的问题。

于 2013-03-08T12:40:17.783 回答
0

对密码字段进行更新以更改要散列的密码。您可以为此使用 SHA1。您想对密码进行哈希处理,而不是加密。

检查提供的密码是否正确时,您需要对用户提供的值进行哈希处理,并将其与数据库字段中的值进行比较。

在对密码进行哈希处理时,您想使用某种盐。理想情况下,这对于每个用户来说应该是不同的。一个类似的问题包含很好的答案是:Secure hash and salt for PHP passwords

于 2012-06-27T11:56:01.347 回答
0

您可以使用 md5 或密码,但要小心彩虹表

mysql> select md5('a');
+----------------------------------+
| md5('a')                         |
+----------------------------------+
| 0cc175b9c0f1b6a831c399e269772661 |
+----------------------------------+
1 row in set (0.00 sec)

mysql> select password('a');
+-------------------------------------------+
| password('a')                             |
+-------------------------------------------+
| *667F407DE7C6AD07358FA38DAED7828A72014B4E |
+-------------------------------------------+
1 row in set (0.00 sec)

有些人只是以一种方式加密密码并添加一些愚蠢的文本,IE

假设您要加密“Hello”并且您将使用 MD5,您将执行以下操作:

mysql> select password('dumbtext Hello');
+-------------------------------------------+
| password('dumbtext Hello')                |
+-------------------------------------------+
| *1F2CE4EA3F6F689369453F090A660A9D0314AD90 |
+-------------------------------------------+
1 row in set (0.00 sec)

然后,如果您想验证会话,您只需在用户在表单输入字段中使用的密码之间进行匹配:

if (md5("dumptext".user(password_input))== 数据库中的字段,然后 Session ON!. if not Reject

这是Mysql密码加密信息,有不同的选项,这取决于你

于 2012-06-27T12:10:35.777 回答
0

让我偶然发现您的帖子是因为我遇到了与您相同的问题,但不知何故我想通了。我最初创建了一个表并将数据插入其中,但没有对其进行加密:后来我发现在 mysql 中有一种加密数据的方法,但它只能使用查询和 md5()、sha()、sha1 ()、sha2() 甚至更多

这就是我所做的。

您必须创建另一个与当前表相同的表(但当然使用不同的表名)。

INSERT INTO users_new(userID, password) SELECT userID, sha1(password) FROM users;

现在请注意,这是两个不同的表(users 和 users_new),这些表具有相同的列名和特征。该命令将 userID 的值和加密(使用 sha1() 函数)密码复制到表 users 中。

请记住将列密码设置为 VARCHAR(40) 类型,因为解密后的字符长度为 40 字节(字符)长。

希望这会有所帮助。发表您的评论或留下回复。

给你更多的恩典。

于 2015-07-31T10:20:47.763 回答
0

加密数据有两种哲学:

  • 1-way 哲学 使用算法加密或散列数据,以便无法获取原始字符串。这可以使用 MD5 或 SHA1 来完成。

    插入用户(用户,密码)值('userLogin',md5('myPassword'));

    更新用户设置密码 = sha1('myOtherPassword') where user='userLogin';

验证这一点的方法是对用户提供的密码应用方法(sha1 或 md5),并将生成的哈希值与存储在数据库中的哈希值进行比较。

select id from users where user='userLogin' and password = sha1('passwordFromUser')
  • 双向哲学 使用可编码或解码的算法加密数据。这可以通过 AES_ENCRYPT() 和 AES_DECRYPT() 来完成。

    插入用户(用户,密码)值('userLogin',AES_ENCRYPT('myDecodeablePass','myEncryptionKey'));

验证这一点的方法是对存储的字符串使用解密方法并将结果与​​用户提供的密码进行比较

select AES_DECRYPT(password, 'myEncryptionKey') as myDecodedPassword from users 
where user='userLogin';

请注意,以这种方式,中间人攻击可能会破坏加密密钥并因此冒着所有密码的风险,除非它是每个用户的密钥。

注意: 为了避免彩虹表(或预先计算的哈希表),建议在要加密的字符串中插入一个随机的非字典词......因为很多用户倾向于使用简单的密码,如“密码”或“123456”

于 2015-07-31T11:29:27.667 回答