2015-01-06 33 views
-1

我使用openssl_public_encrypt方法來加密使用GET發送到服務器的消息目前我在PHP(這只是一個理論的證明),如果我嘗試存儲加密的文本到數據庫中,我最終得到的結果是:「你的SQL語法有錯誤;檢查與你的MySQL服務器版本對應的手冊是否有正確的語法」,儘管這個錯誤不會出現在純文本中。無法插入加密文本到SQL

代碼用來生成密鑰:

$config = array(
"digest_alg" => "sha512", 
"private_key_bits" => 4096, 
"private_key_type" => OPENSSL_KEYTYPE_RSA, 
); 

//創建私鑰和公鑰 $水庫= openssl_pkey_new($配置);

//將私鑰從$ res提取到$ privKey openssl_pkey_export($ res,$ privKey);

//將公鑰從$ res提取到$ pubKey $ pubKey = openssl_pkey_get_details($ res); $ pubKey = $ pubKey [「key」];

openssl_public_encrypt($消息,$加密,$ PUBKEY); $ SQL = 「INSERT INTO na14_messagingmessagesToFromFormessage)VALUES( '$爲了', '$從', '$對於',$encrypted)。」;加密的字符串的

實施例: @aú¡±清大]н¾ÄÉçù\ dgQppx +Þ~ŽüÑzXê+¡™½ºWÏãУú]¢C-A'O>μCŽ{¶f¶³」 CAA「,HK <á[àžÑõ〜ŸòqòÊÊ「ÏAÁ{™OMu£öåmL¶9j½m¨eë] |ñNšÅo|」~û®AûÉ{q¤<'Vÿ¤¤*。÷+j'iËμ_öSÏ~þHX_΃âñ'ÎãDÌÛó겿2¾GÀ5ûà 「á©«™®`§=¹0åÿŸ|ácü¤l¼ÛmÚysŽH2È«\ SP÷ÒÕ.ºjôÊEŠ»™! 'LrñboïVܶÓFw〜3‡ÛŽ.Z,:îawxRã^〜>:μ-AO' <ûQ8, •「ÕC9Ç[\£vU¶°6‡Þts< CG¢8Y8> $ c~」•; I> NH 3)「FA + Z™OO•¿¼€AF£Þ\ZjxÂS#þ³」「zÇùACD¥QW ,MN $ EI '$•Ñæ6нžS™ÕÍPƒuâÛŸ%' o7b¯gŸ»d [³%ådKÁ·¶的Et×Y©[~Û•克@?°Ü÷§Ý±³Õßý<¸ å¡Ð{(Ö'f; W-3ïMkHÿÇùÒ1•IAU

我假定這只是這是造成把這個到數據庫中的錯誤的文字,我已經試過VARCHAR,LONGTEXT,和斑點。我不確定哪種數據類型適用於此。

+0

請顯示您的代碼?這聽起來像你沒有使用參數化語句或轉義字符串。 – Barmar

+0

事實證明,我再次做了longtext,現在它的工作原理,我不知道爲什麼,但如果它工作,它會工作 – user2636072

+0

@ user2636072也許它現在可能不工作。該編碼數據中有多少「\ X00」字節。 – Jasen

回答

0

更改SQL變量回來編碼LONGTEXT一起爲Base64有固定出現的所有問題。