Delphi中用MySQL的VarBinary存储AES加密数据,此方式是否正确?
在Delphi中结合MySQL实现AES加密存储密码的实践
我之前已经实现了可用的AES加密和解密算法,还通过WriteBinaryStream和ReadBinaryStream把加密后的内容成功存在ini文件里。最近要把这套逻辑迁移到MySQL中,踩了个小坑后终于搞定了,分享给大家:
踩坑经历
一开始我尝试把加密后的内容存在MySQL的varchar字段里,但怎么都不成功——应该是字符编码转换过程中破坏了二进制加密数据。后来换成varbinary类型就完美解决了,毕竟varbinary是专门用来存储二进制数据的,不会做额外的编码转换,能完整保留加密后的字节流。
具体实现代码
加密后存入MySQL的varbinary字段
UserMain.spUser.Params.ParamByName('pPassword').Value := TEncoding.ANSI.GetBytes(aes_encrypt(Edit2.Text));
从MySQL读取后解密显示到Edit控件
Edit2.Text := aes_decrypt(TEncoding.ANSI.GetString(UserMain.spUser.Params.ParamByName('pPassword').AsBytes));
小提醒
这里用TEncoding.ANSI做字节和字符串的转换,是为了保证加密前后的字节流一致性,避免因为编码差异导致解密失败。如果你的业务场景有特殊编码需求,可以根据实际情况调整,但一定要保证加密和解密时的编码逻辑完全一致。
内容的提问来源于stack exchange,提问作者user1937012
相关产品推荐
相关产品推荐

