我的表格有密码字段,这是一个纯文本。现在,我想加密该字段。怎么办?
答案 0 :(得分:2)
MySQL具有广泛的内置加密功能,您可以找到详细的概述here。
你可能想看看例如AES_DECRYPT()和AES_ENCRYPT()。
INSERT INTO table (mycolumn) VALUES(AES_ENCRYPT('Hello!', 'encryption_key'));
SELECT AES_DECRYPT(mycolumn, 'encryption_key') FROM table;
答案 1 :(得分:1)
将数据库备份(仅限数据)作为csv文件。使用以下查询使用密钥更新现有字段:
LOAD DATA INFILE 'C:/Sample.csv' INTO TABLE myTable(myname,@mypass) SET mypass=AES_ENCRYPT(@mypass,'key:test');
希望它能解决你的问题。
答案 2 :(得分:0)
更新密码字段以更改要哈希的密码。你可以使用SHA1。您希望哈希密码,而不是加密。
检查提供的密码是否正确时,您需要散列用户提供的值并将其与数据库字段中的值进行比较。
在对密码进行哈希处理时,您需要使用某种盐。理想情况下,每个用户应该有所不同。一个类似的问题包含好的答案:Secure hash and salt for PHP passwords
答案 3 :(得分:0)
您可以使用md5或密码,但请注意rainbow tables
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)
有些ppl只是以一种方式加密密码并添加一些愚蠢的文字,I.E
假设您要加密“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 if not Reject
这里是Mysql密码encrypt information,有不同的选项,这取决于你
答案 4 :(得分:0)
为什么不使用列级加密解决方案?
正如我最近发现的,MySQL内部加密功能有许多缺点。 我从一个提供mysql加密免费软件的博客中获取了这些信息。 http://www.mydiamo.com/index.php/mdblog/item/24-why-applying-mysql-internal-encryption-functions-only-is-not-enough
如果您只是尝试加密密码字段,则列级加密解决方案可能是为您提供安全性的最佳方式。 (列级加密是一种数据库加密方法,其中特定列中每个单元(或数据字段)中的信息具有相同的密码,用于访问,读取和写入.-来自WhatIs.com - )
MyDiamo,这是我上面谈到的免费软件,似乎很方便使用。也许你可以尝试一下。
答案 5 :(得分:0)
是什么让我在你的帖子上绊倒是因为我遇到了同样的问题,但不知怎的,我弄明白了。 我最初创建了一个表并将数据插入其中,而没有对其进行加密:我后来发现有一种方法可以在mysql中加密数据,但它只使用了一个查询和md5(),sha(),sha1 (),sha2()和可能更多。
这就是我所做的。
您必须创建另一个与当前表相同的表(但当然使用不同的表名)。
INSERT INTO users_new(userID, password) SELECT userID, sha1(password) FROM users;
现在请注意,这些是两个不同的表(users和users_new),这些表具有相同的列名和特征。该命令将userID的值和加密的(使用sha1()函数)密码复制到表用户中。
请记住使列密码的类型为VARCHAR(40),因为解密的字符长度为40bytes(字符)长。
希望这有用。发表评论或发表回复。
更加恩惠给你。
答案 6 :(得分:0)
加密数据有两种理念:
单向哲学 使用算法对数据进行加密或散列,以便无法获取原始字符串。这可以使用MD5或SHA1来完成。
插入用户(用户,密码)值('userLogin',md5('myPassword'));
更新用户设置密码= sha1('myOtherPassword'),其中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”
答案 7 :(得分:0)
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
上进行了测试。