我有一个带有密码字段的表,它是纯文本。现在,我想加密该字段。怎么做 ?
7 回答
MySQL 具有广泛的内置加密功能,您可以在此处找到详细概述。
您可能想看看例如 AES_DECRYPT() 和 AES_ENCRYPT()。
INSERT INTO table (mycolumn) VALUES(AES_ENCRYPT('Hello!', 'encryption_key'));
SELECT AES_DECRYPT(mycolumn, 'encryption_key') FROM table;
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
.
将您的数据库(仅数据)备份为 csv 文件。使用以下查询使用键更新现有字段:
LOAD DATA INFILE 'C:/Sample.csv' INTO TABLE myTable(myname,@mypass) SET mypass=AES_ENCRYPT(@mypass,'key:test');
希望它能解决你的问题。
对密码字段进行更新以更改要散列的密码。您可以为此使用 SHA1。您想对密码进行哈希处理,而不是加密。
检查提供的密码是否正确时,您需要对用户提供的值进行哈希处理,并将其与数据库字段中的值进行比较。
在对密码进行哈希处理时,您想使用某种盐。理想情况下,这对于每个用户来说应该是不同的。一个类似的问题包含很好的答案是:Secure hash and salt for PHP passwords
您可以使用 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密码加密信息,有不同的选项,这取决于你
让我偶然发现您的帖子是因为我遇到了与您相同的问题,但不知何故我想通了。我最初创建了一个表并将数据插入其中,但没有对其进行加密:后来我发现在 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 字节(字符)长。
希望这会有所帮助。发表您的评论或留下回复。
给你更多的恩典。
加密数据有两种哲学:
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”