【发布时间】:2015-01-06 03:00:27
【问题描述】:
我目前在 php 中使用 openssl_public_encrypt 方法加密使用 GET 发送到服务器的消息(这只是一个理论证明),如果我尝试将加密文本存储到数据库中,我最终会得到结果:“您的 SQL 语法有错误;请检查与您的 MySQL 服务器版本相对应的手册以获取正确的语法”,即使纯文本不会出现此错误。
用于生成密钥的代码:
$config = array( "digest_alg" => "sha512", "private_key_bits" => 4096, "private_key_type" => OPENSSL_KEYTYPE_RSA, );// 创建私钥和公钥 $res = openssl_pkey_new($config);
// 将 $res 中的私钥提取到 $privKey openssl_pkey_export($res, $privKey);
// 将 $res 中的公钥提取到 $pubKey $pubKey = openssl_pkey_get_details($res); $pubKey = $pubKey["key"];
openssl_public_encrypt($message, $encrypted, $pubKey); $sql = "INSERT INTO
na14_messaging.messages(To,From,For,message) 值 ('$To', '$From', '$For',$encrypted)";
加密字符串示例: @aú¡±ñþú]н¾ÄÉçù\dgQppx+Þ∼ŽüÑzXê+¡™½ºWÏãУú]¢c—Ä'õ›µCŽ{¶f¶³”câ“,hK‹á[àžÑõ~Ÿ-ëòqÊ"ÏAÁ{™ OMu£öÈåmL¶9j½m¨eë]|ñN šÈo|"~û®AûÉ{q¤:µ-áÒ'Ѿ)„fá+ž ™ØÓ•¿¼€äF£Þ\ZjxÂS#þ³”"zÇù Áçd¥qw,mn$eî' $•Ñæ6Ð ½žS™ÕÍPƒuâÛŸ% 'o7b¯gŸ»D[³%ådKÁ·¶ Et×y ©[∼Û•g@?°Ü÷§Ý± ³Õßý‹¸Åå¡¡{(Ö'f;w–3ïMkHÿÇùÒ1•ÏåÜ
我假设只是字符导致将其放入数据库时出错,我尝试了 varchar、longtext 和 blob。我不确定哪种数据类型适用于此。
【问题讨论】:
-
请出示您的代码?听起来您没有使用参数化语句或转义字符串。
-
原来我又做了一次longtext,现在它工作了,我不知道为什么,但是如果它工作它就可以了
-
@user2636072 也许现在可以工作,也许不行。该编码数据中有多少“\X00”字节。
-
原来修复只在某些情况下有效,事实上 openSSL 会添加 ' 和其他字符,因此它会转义字符串等。我已经用我正在使用的代码更新了这个希望这能解决问题