我想在mysql上使用sql解密数据库中的字段,但在解密之前我需要检查字段是否可以解密。
update customer
set name = aes_decrypt(from_base64(name), 'key')
如果提供的密钥错误或数据无效,则name字段将设置为null;
我尝试添加一个如下所示的where子句,以确保字段名称尚未解密,但这不会一直有效,因为如果密钥不正确或数据无效,aes_decrypt可以返回null或者垃圾。< / p>
update customer
set name = aes_decrypt(from_base64(name), 'key')
where aes_decrypt(from_base64(name), 'key') is not null.
那么如何检查返回的值是null还是“垃圾”?或者还有其他什么方法?
来自mysql doc:“如果输入数据或密钥无效,AES_DECRYPT()可能会返回非NULL值(可能是垃圾)。”
我得到的垃圾示例:w Y 'v Y m _
由于
答案 0 :(得分:0)
不要存储原始密文,请遵循Defuse Security's PHP encryption library第2版的主角:
然后问题变为&#34;字符串的前N个字节是否计算为我的加密库的已知版本标记&#34;?