我正在尝试解密并将密码更新到mysql数据库表中。这样做是给我一个奇怪的错误。
PHP警告:PDO :: exec():SSL操作失败,代码为1. OpenSSL 错误消息:错误:0906D06C:PEM例程:PEM_read_bio:无起始行 在 ... /供应商/ robmorgan / phinx / src目录/ Phinx / DB /适配器/ PdoAdapter.php 第306行PHP警告:PDO :: exec():MySQL服务器已经消失了 ... /供应商/ robmorgan / phinx / src目录/ Phinx / DB /适配器/ PdoAdapter.php 第306行PHP警告:PDO :: exec():读取结果集时出错 标题 ../vendor/robmorgan/phinx/src/Phinx/Db/Adapter/PdoAdapter.php 在第306行
加密解密代码:
function processPlainText($plainText, $action) {
$cryptText = '';
$res = 'encrypt' == $action ? openssl_get_privatekey($this->keyContents) : openssl_get_publickey($this->keyContents);
$action = 'encrypt' == $action ? 'openssl_private_' . $action : 'openssl_public_'.$action;
$action($plainText, $cryptText, $res);
openssl_free_key($res);
return $cryptText;
}
非常感谢对此问题的任何见解。
有效的代码:
$pdo = getMysqlPdoInstance(); //get pdo instance using ssl
$id = 101;
$plainText = 'abcd';
$password = processPlainText($plainText, 'encrypt');
$count = $pdo->exec(sprintf("UPDATE table set password = '%s' WHERE id = %d", $password, $id));
print("Updated $count rows.\n");
失败的代码:
$pdo = getMysqlPdoInstance(); //get pdo instance using ssl
$id = 101;
$password = processPlainText($encryptedPassword, 'decrypt');
$count = $pdo->exec(sprintf("UPDATE table set password = '%s' WHERE id = %d", $password, $id));
print("Updated $count rows.\n");
由于
答案 0 :(得分:2)
使用SSL进行Mysql连接后,你点击bug,用patch(“openssl_decrypt触发PDO中的错误”)解析为PHP 7.1,还没有后向移植。在撰写本文时的最后一条评论中,可以找到解决方法的说明:
..请在app /脚本中的openssl_pkey_get_public之后调用openssl_error_string()。
在你的函数中,如果你不能移动到PHP7.1,将while(openssl_error_string() !== false);
放在openssl_free_key()之上。
在您的评论中,您怀疑是正确的,当使用openssl_public_decrypt时,“PDO在某种程度上面临[a]问题。”