AES,MySql和头痛

时间:2009-12-10 01:35:38

标签: php mysql aes

我正在为电子商务网站的结帐页面工作。在所述站点中,人们输入他们的信用卡信息,并以AES加密格式保存到订单中。当他们所支持的全部是VISA时,这很好。现在他们支持MasterCard和Discover(16位数字),它不再有效。插入查询如下所示:

"insert into order_master set ccnum = AES_ENCRYPT(:ccnum, 'password') ...";

我也尝试了替代格式:

"insert into order_master (ccnum, ...) values (AES_ENCRYPT(:ccnum, 'password')..)";

两者都无济于事。有人可以试着指出我正确的方向,我做错了什么?我甚至吐出了条目查询,以确保正确插入值,等等。这是非常令人沮丧的,我希望有人可以帮助我。谢谢!

2 个答案:

答案 0 :(得分:1)

事实证明,客户端的列数据类型设置为varchar(20) - 无法捕获所有二进制数据(加密前只有16个字符的卡号)。我让他把长度改为255,现在效果很好。感谢您的所有帮助/建议!

答案 1 :(得分:0)

我没有看到您的sql有任何问题,但来自mysql documentation ...

  

如果AES_DECRYPT()检测到无效数据   或者填充不正确,它返回NULL。   但是,有可能   AES_DECRYPT()返回非NULL   如果输入值(可能是垃圾)   数据或密钥无效。

这可以解释你可以解密你得到一个值..但是如果你加密并且你得到一个返回的空值,那么两个输入值中的一个可能是null。