2009-12-10 40 views
1

我正在爲電子商務網站的結帳頁面工作。在所述網站中,人們輸入他們的信用卡信息並將其以AES加密格式保存到訂單中。當他們支持的是VISA時,這很好。現在他們支持萬事達卡和Discover(16位數字),它不再有效。插入查詢看起來是這樣的:AES,MySql和令人頭痛

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

我自己也嘗試了另一種格式:

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

兩個無濟於事。有人可以試圖指出我正確的方向,我做錯了什麼?我已經去吐出條目查詢,以確保值插入正確,等沒有。這很令人沮喪,我希望有人能幫助我。謝謝!

+0

我想我應該提到,當試圖加密萬事達卡和發現卡16位數字字符串時,插入到數據庫中的值是一個ecrypted「空」值......因爲我可以通過AES_decrypt來獲取該值。 – 2009-12-10 01:37:08

+1

難道這只是因爲與MySQL無關的原因,當輸入MasterCard/Discovery車時,ccnum的值爲空/假? (垃圾進入 - >垃圾進出...) – mjv 2009-12-10 01:51:32

+0

否定的,不幸的是我已經確認準備好的查詢已經用有效數據格式化了。 – 2009-12-10 02:02:03

回答

1

事實證明,客戶有(20)數據類型設置爲VARCHAR列 - 它未能捕獲所有的二進制數據(只有卡號與密碼前16個字符)。我讓他把長度改爲255,現在效果很好。感謝您的所有幫助/建議!

0

我看不出點兒什麼不對您的SQL但從mysql documentation ...

如果AES_DECRYPT()檢測到無效數據 或不正確填充,它會返回NULL。 然而,可能的是 AES_DECRYPT()返回一個非空 值(可能是垃圾)如果輸入數據 或密鑰是無效的。

這可以解釋你可以解密你得到一個值..但是如果你加密,你得到一個返回的空值,兩個輸入值中的一個可能是空值。