在我的数据库中,我有一列以这种形式存储cryptojs加密值:
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进行加密和解密的方式不同。
谢谢。
答案 0 :(得分:0)
看起来您的初始字符串是 Base64编码。 cryptoJS.AES
或其他进程可能正在获取加密的字节并将其存储为 Base64 在数据库中。
您的数据库解密例程可能假定原始字节,因此您需要将 Base64 字符串(检查mysql的base64例程的网络)转换为实际字节,然后将其传递给AES_DECRYPT
功能。
答案 1 :(得分:0)
不确定您的问题是否仍然存在,但是建议您使用CryptoJS的替代方法。我发现MySQL AES加密和解密的Node JS实现。这个库也帮助我加密了MySQL可读的数据。
这里是链接: