在我的数据库中,我有一个列,它以这种形式存储加密的值:
U2FsdGVkX1/BpEUjr5y+hivlNpUep+HZQG4Tw8bmTvQ=
当我用cryptojs解密它的时候,一切都很好。
let decryptedValue = cryptoJS.AES.decrypt(
encryptedField,
secretKey
);但是用mysql解密它会返回null。
我曾尝试将加密字符串转换为二进制,然后使用mysql的aes_decrypt()对其进行解密,但它返回null。
SELECT convert(AES_DECRYPT(binary(encrypted_field),'secret_key') using utf8) as decrypt加密值是数字,我需要解密它们,以便在mysql中使用它们进行一些计算。
我不知道我解密它的方式是否有问题,还是cryptojs和mysql使用AES进行加密和解密的方式不同。
提前谢谢你。
发布于 2019-09-20 17:43:00
看起来您的初始字符串是Base64编码的。可能是cryptoJS.AES或其他进程获取了加密的字节,并将它们作为Base64存储在数据库中。
您的数据库解密例程可能假设为原始字节,因此您需要将 base64 字符串(请在网上查看mysql的base64例程)转换为实际的字节,然后将它们传递给AES_DECRYPT函数。
发布于 2020-06-10 17:01:57
不确定您的问题是否仍然存在,但这里有一个建议,可以使用CryptoJS的替代品。我找到了一个Node实现的MySQL加密和解密。这个库还帮助我加密了在MySQL中可读的数据。
链接如下:
https://stackoverflow.com/questions/58025741
复制相似问题