我有一个表:1)加密的id varchar(256)2)初始化向量(iv)varchar(256)。
我想用密钥解密列值
我正在使用:
select Cast(AES_DECRYPT(Encrypted_ID,'Key',InitializationVector_iv)as CHAR ) as DecryptedValue from MyTable;
结果为空。
我也试过:
select Cast(AES_DECRYPT(AES_ENCRYPT(Encrypted_ID,'Key',InitializationVector_iv),'Key') as CHAR ) as DecryptedValue from MyTable;
结果是几行的blob。
我不知道我做错了什么。有人能帮我解密这个列的语法吗
钥匙
初始化向量值
加密列
3条答案
按热度按时间ztigrdn81#
在我的例子中,aes不适用于mysql工作台。我必须使用mysql控制台。
cvxl0en22#
mysql工作台为我工作。在我的例子中,加密值是以64为基数编码的。所以我必须使用“from\u base64”函数对base64值和iv进行解码。
在开始解密之前,请确保/iv值的加密类型、base64编码、hex/unhex正确。查看mysql函数https://dev.mysql.com/doc/refman/8.0/en/string-functions.html
希望这对某人有帮助。
r1wp621o3#
实际上,您的第一个查询没有任何问题,从语法上讲,正如这个示例所示。
至于为什么它不工作,我设法让查询在两种情况下返回null。第一,如果使用不同的iv进行加密和解密,则返回null,因此您可能需要查看如何将其存储为iv。第二,在存储和尝试检索值时,将block\u encryption\u mode变量设置为不同的值时,返回null,检查会话之间是否意外恢复到默认的“aes-128-ebc”。可能还有其他人。。。
第二个查询将失败,因为您需要同时向加密和解密函数提供iv,您只能使用它来加密。另外,由于您是从mytable获取值,因此加密的\u id已经被加密,此查询的效果是再次加密它,然后将其反转以返回存储的(加密的)值。
最后,aes将只使用16字节的iv,所以您不妨将其设为varbinary(16)。