Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 加密破坏MySQL查询?_Php_Mysql_Encryption_Phpseclib - Fatal编程技术网

Php 加密破坏MySQL查询?

Php 加密破坏MySQL查询?,php,mysql,encryption,phpseclib,Php,Mysql,Encryption,Phpseclib,作为一个加密新手,我终于有了一个很棒的系统。问题是,我很确定它破坏了我的SQL查询。如果你们中有人能帮我的话,我相信这是我很容易忽视的事情。这是我用来生成密钥的代码: include('Crypt/RSA.php'); $rsa = new Crypt_RSA(); extract($rsa->createKey()); 这是加密的代码: openssl_public_encrypt($data, $encrypted, $publickey); return $encrypted;

作为一个加密新手,我终于有了一个很棒的系统。问题是,我很确定它破坏了我的SQL查询。如果你们中有人能帮我的话,我相信这是我很容易忽视的事情。这是我用来生成密钥的代码:

include('Crypt/RSA.php');

$rsa = new Crypt_RSA();

extract($rsa->createKey());
这是加密的代码:

openssl_public_encrypt($data, $encrypted, $publickey);
return $encrypted;
所有这些都很好,我通过一个函数调用它。所有的加密本身都是有效的。问题是,当我试图在MySQL数据库中存储这些值时,我的查询会随机失败

当我打印要调试的查询时,我会看到加密的字符串
“ï½ï½ï½ï½ïï½ïï½ïïï½ï6uï½ïï½ïï½ïïï½ïï½ïïïïï½ï½ïïïïïïïïïïïïï。使用base64_encode()和base64_decode()可以防止查询中出现错误,这显然是由于在查询中发送二进制文件造成的。谢谢帕塔舒

在查询中使用它之前,需要将其编码为base64或hex。查询不允许包含二进制数据,它们必须是可打印的,即使在数据库中允许您存储查询本身的二进制数据,也必须是“已清理”和“可打印的”。您在查询中未进行的输入清理需要在所有查询中的任何地方进行,以确保脚本的安全。输入中的特殊字符不应影响查询。的可能重复。到目前为止,您显然是在向SQL中注入原始输入。您应该将二进制数据视为二进制数据!将其存储在BLOB列中,正确地转义它,或者使用适当的数据库API将二进制数据作为BLOB传递(取决于数据库连接器)。Base64编码这是修复症状的一种方法,但它做得不正确。@deceze我通常会转义表单输入,但我一直担心转义加密数据会损坏表单输入。Base64编码和存储MEDIUMTEXT比将转义的二进制数据存储为MEDIUMBLOB更糟糕,这有什么原因吗?谢谢你的耐心,我正在尽我最大的努力学习正确的方法。看。将数据视为二进制数据至少会给您带来大小优势,base64编码数据比二进制数据占用约33%的空间。它还允许数据库按原样处理数据,允许您使用作用于数据库本身的二进制数据的函数(如果您不处理数据库中的数据,这可能是一个理论上的优势,而不是实际的优势)。非常感谢,我将照您的建议做。另外,你发布的链接似乎正是我想问的问题(我想我错过了,因为我没有搜索二进制文件。)有没有办法将我的链接列为副本?我知道问一个已经回答过的问题是不受欢迎的。