我使用以下查询获取AES加密值:
SELECT AES_ENCRYPT( 'REMYA UNNIKRISHNAN', 'nirvana1987' ) AS encString
我的价值是:
'UT�\Z��*���F��R�đtFn�X/�~J�
现在,当我尝试将此值输入到另一个表时,它会显示SQL语法中的错误,因为前提'
。我必须再次解密值才能显示它。有没有人对如何解决这个问题有任何建议?任何其他不会返回的加密'或以任何方式将加密值存储在数据库中而不删除单引号?
答案 0 :(得分:6)
AES_ENCRYPT和AES_DECRYPT函数使用并返回在浏览器中显示时最不可能以复制粘贴方式使用的二进制数据(例如phpmyadmin)。
您必须将两个函数的返回值传递给可以存储二进制数据的列,或者将函数的返回值编码为十六进制表示。
为了能够复制粘贴返回的数据,您可以使用以下SQL查询
SELECT HEX( AES_ENCRYPT( 'REMYA UNNIKRISHNAN', 'nirvana1987' ) ) AS encString
这将返回: 275554F1BABE1AAEEE0F2AEBBDDEC146EFFA52F3C49174466EA5582FCF7E4AFA
现在,要在SQL中再次解密此值,您可以使用查询
SELECT AES_DECRYPT( UNHEX( '275554F1BABE1AAEEE0F2AEBBDDEC146EFFA52F3C49174466EA5582FCF7E4AFA' ) , 'nirvana1987' )
这将返回原始字符串。
现在要将加密数据存储在列中,该列必须是BLOB,BINARY或它们各自的存储格式。我们假设您有一个列" encData"在表格#34; myData"。您可以使用以下查询将其存储到
中INSERT INTO myData (encData) VALUES (AES_ENCRYPT( 'REMYA UNNIKRISHNAN', 'nirvana1987' ))
要检索存储在表格中的解密信息,您可以执行查询
SELECT AES_DECRYPT(encData, 'nirvana1987') as decString FROM myData