【问题标题】:Cannot insert encrypted text into sql无法将加密文本插入 sql
【发布时间】: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 会添加 ' 和其他字符,因此它会转义字符串等。我已经用我正在使用的代码更新了这个希望这能解决问题

标签: php ssl


【解决方案1】:

将 SQL 变量改回长文本以及编码为 base64 已解决所有出现的问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-09-02
    • 2017-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-05
    相关资源
    最近更新 更多