我的桌子有: 1)Encrypted_ID varchar(256) 2)初始化向量(iv)varchar(256)。
我想使用密钥解密列值
我正在使用:
select Cast(AES_DECRYPT(Encrypted_ID,'Key',InitializationVector_iv)as CHAR ) as DecryptedValue from MyTable;
结果为Null。
我也尝试过:
select Cast(AES_DECRYPT(AES_ENCRYPT(Encrypted_ID,'Key',InitializationVector_iv),'Key') as CHAR ) as DecryptedValue from MyTable;
结果是几行的斑点。
我不确定我在做什么错。有以下情况时,有人可以帮忙解密该列的语法吗?
答案 0 :(得分:1)
您的第一个查询实际上没有任何错误,从语法上讲,正如本示例所演示的那样,它就在现场。
mysql> SET @@SESSION.block_encryption_mode = 'aes-256-cbc';
mysql> create table MyTable(
-> Encrypted_ID varbinary(256),
-> InitializationVector_iv varbinary(16)
-> );
Query OK, 0 rows affected (0.93 sec)
mysql> SET @iv = RANDOM_BYTES(16);
Query OK, 0 rows affected (0.00 sec)
mysql> INSERT INTO MyTable SET Encrypted_ID = AES_ENCRYPT('hello','key', @iv), InitializationVector_iv = @iv;
Query OK, 1 row affected (0.17 sec)
mysql> SELECT CAST(AES_DECRYPT(Encrypted_ID,'key', InitializationVector_iv) AS CHAR) from MyTable;
+------------------------------------------------------------------------+
| CAST(AES_DECRYPT(Encrypted_ID,'key', InitializationVector_iv) AS CHAR) |
+------------------------------------------------------------------------+
| hello |
+------------------------------------------------------------------------+
1 row in set (0.00 sec)
至于为什么它不起作用,我设法在两种情况下使查询返回NULL。第一,如果您使用不同的iv进行加密和解密,则将返回NULL,因此您可能需要查看如何将其存储为iv。第二,在存储和尝试检索该值时,如果将block_encryption_mode变量设置为不同,则会得到NULL,请确保您没有在会话之间意外恢复为默认的'aes-128-ebc。可能还有其他人...
第二个查询将失败,因为您需要同时向加密和解密函数提供iv,而仅使用它进行加密。另外,由于您正在从MyTable中获取值,因此Encrypted_ID已被加密,并且此查询的作用是再次对其进行加密,然后再将其反转以使您返回到存储(加密)的值。
最后,AES仅会使用iv的16 bytes,因此您最好将其设为VARBINARY(16)。
答案 1 :(得分:0)
AES无法与MySQL Workbench一起使用。 我必须使用mysql控制台。
答案 2 :(得分:0)
MySql Workbench为我工作。 在我的案例中,加密值以base 64编码。 因此,我不得不使用“ From_base64”函数解码base 64值和IV。
SET block_encryption_mode = 'aes-256-cbc';
set @k = 'Key';
set @iv = From_base64('InitializationVector');
set @v = from_base64('EncryptedValue');
select CAST(AES_DECRYPT(@v, @k, @iv) AS CHAR);
在开始解密之前,请确保加密类型,基数64编码,值/ Iv的十六进制/反十六进制正确。 查看MYSql函数 https://dev.mysql.com/doc/refman/8.0/en/string-functions.html
希望这对某人有帮助。