Php AES、MySql和头痛

Php AES、MySql和头痛,php,mysql,aes,Php,Mysql,Aes,我正在为一个电子商务网站的结账页面工作。在该网站上,人们输入他们的信用卡信息,并以AES加密格式保存到订单中。当他们只支持VISA时,这种方法效果很好。现在他们支持MasterCard和Discover(16位数字),它不再工作了。插入查询如下所示: "insert into order_master set ccnum = AES_ENCRYPT(:ccnum, 'password') ..."; 我还尝试了其他格式: "insert into order_master (ccnum, ..

我正在为一个电子商务网站的结账页面工作。在该网站上,人们输入他们的信用卡信息,并以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')..)";

两者都没有用。有人能告诉我我做错了什么吗?我甚至还抛出了entries查询,以确保正确插入值,等等。这很令人沮丧,我希望有人能帮助我。谢谢

我看不出您的sql有任何错误,但是从

如果AES_DECRYPT()检测到无效数据 如果填充不正确,则返回NULL。 然而,这是可能的 AES_DECRYPT()返回一个非空值 如果输入 数据或密钥无效


这可以解释为你可以解密你得到的值。。但是,如果加密后返回null值,则两个输入值中可能有一个为null

我看不出您的sql有任何错误,但是从

如果AES_DECRYPT()检测到无效数据 如果填充不正确,则返回NULL。 然而,这是可能的 AES_DECRYPT()返回一个非空值 如果输入 数据或密钥无效


这可以解释为你可以解密你得到的值。。但是,如果加密后返回null值,则两个输入值中可能有一个为null

结果是,客户机将列的数据类型设置为varchar(20)——这无法捕获所有二进制数据(加密前只有16个字符的卡号)。我让他把长度改为255,现在效果很好。谢谢你的帮助/建议

结果是,客户机将列的数据类型设置为varchar(20)——这无法捕获所有二进制数据(加密前只有16个字符的卡号)。我让他把长度改为255,现在效果很好。谢谢你的帮助/建议

我想我应该提到,当试图加密MasterCard和Discovery card 16位字符串时,插入数据库的值是一个加密的“null”值……因为我可以通过AES_解密来获得该值。这可能仅仅是因为与MySQL无关的原因,当输入MasterCard/Discovery car时,:ccnum值是null/false吗?(垃圾输入->垃圾输出…)否定,不幸的是,我已确认准备好的查询使用有效数据正确格式化。我想我应该提到,在尝试加密MasterCard和Discovery card 16位字符串时,插入数据库的值是加密的“null”值…因为我可以通过AES_解密来获得值。这可能仅仅是因为与MySQL无关的原因,当输入MasterCard/Discovery car时:ccnum值为null/false吗?(垃圾输入->垃圾输出…)否定,不幸的是,我已确认准备好的查询使用有效数据正确格式化。