我使用ENCRYPT()函数在mysql中存储一个字符串。我想获取匹配该字符串的行,但新的ENCRYPT()调用给了我一个不同的值,因此它们永远不会匹配。
这是预期的,因为我不是(也不能)给它一致的salt
:
http://dev.mysql.com/doc/refman/5.0/en/encryption-functions.html#function_encrypt
如果没有给出
salt
参数,则使用随机值。
这是我正在运行的返回空的查询:
SELECT * FROM `table` WHERE ENCRYPT('string') = `enc_string`
我知道这是可能的,因为这是第三方应用程序使用的,但我无法在他们这样做的地方找到他们的查询。有没有办法强制ENCRYPT使用以前的盐,或预测它?
答案 0 :(得分:1)
如果您使用不带盐的encrypt(),则会生成随机盐(2个字母)并将其添加到加密字符串中。
在后续调用中,您需要将相同的salt传递给ENCRYPT。您可以将整个加密字符串作为salt传递,
encrypt(user_input, encrypted_password) = encrypted_password