Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/55.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
使用MySQL的AES_ECRYPT函数加密一个值,然后使用PHP将其传递到URL字符串中_Php_Mysql_Aes - Fatal编程技术网

使用MySQL的AES_ECRYPT函数加密一个值,然后使用PHP将其传递到URL字符串中

使用MySQL的AES_ECRYPT函数加密一个值,然后使用PHP将其传递到URL字符串中,php,mysql,aes,Php,Mysql,Aes,我需要使用MySQL的AES_encrypt函数对字符串进行加密,然后将加密的字符串附加到URL的末尾,这样就可以对其进行解密,并由另一端的PHP脚本使用 基本上,我使用MySQL的AES_ENCRYPT加密字符串,然后使用PHP的rawurlencode函数使其URL安全。然后,我将加密的字符串传递到URL中,然后由另一端的PHP脚本检索,并成功解密。。。大约95%的时间 似乎大约有5%的字符串正在加密,以至于在加密过程中的某个地方被破坏了,在通过URL传递后,无法在另一端进行解码。有人能帮我

我需要使用MySQL的AES_encrypt函数对字符串进行加密,然后将加密的字符串附加到URL的末尾,这样就可以对其进行解密,并由另一端的PHP脚本使用

基本上,我使用MySQL的AES_ENCRYPT加密字符串,然后使用PHP的rawurlencode函数使其URL安全。然后,我将加密的字符串传递到URL中,然后由另一端的PHP脚本检索,并成功解密。。。大约95%的时间

似乎大约有5%的字符串正在加密,以至于在加密过程中的某个地方被破坏了,在通过URL传递后,无法在另一端进行解码。有人能帮我吗?有没有一种100%防傻子的方法?我还尝试以不同的组合使用urlencode和base64_编码


谢谢。

URL的最大长度是有限的。AES加密的字符串不需要

URL不是传递任意信息的合适载体。如果您必须通过HTTP进行通信,那么使用HTTP POST是一种更好的方法

关于您遇到问题的原因:引用:

注意:请注意以下变量: 可能与HTML实体匹配。诸如此类 &、©和£被解析为 浏览器和实际实体是相同的 用于替代所需变量 名称这显然是一个麻烦 W3C一直在告诉人们 多年来。参考资料如下: . PHP支持更改参数 建议使用W3C的分隔符 通过arg_分隔符的分号 .ini指令。不幸的是 用户代理不在中发送表单数据 此分号分隔格式。A. 更便捷的解决方法是 使用&;而不是&作为 分离器。你不需要改变 PHP的arg_分隔符。别管它 作为&,但只需对URL进行编码 使用HTMLenties或 htmlspecialchars

解决了

使用MySQL的AES_ENCRYPT函数对字符串进行加密后,我使用PHP的bin2hex函数将二进制形式的加密数据转换为十六进制。然后,我将十六进制作为字符串传递到URL的末尾。在另一端收到URL后,我将使用此自定义PHP函数将十六进制字符串恢复为二进制:

function hex2bin($data) {
    $len = strlen($data);
    return pack("H" . $len, $data);
}

从这里开始,剩下要做的就是使用MySQL的AES_解密函数对数据进行解密。原始字符串已成功还原。

数据示例?源代码?:您使用MySQL的AES实现而不是PHP实现有什么特别的原因吗?你可能在调用AES的另一个名字Rijndael中有可用的支持。毕竟,很难弄清楚为什么某些字符串可能出现故障,除非我们知道哪些故障,哪些没有。@Charles-我想他可能是直接从数据库中提取数据,无论如何,我使用MySQL是因为mcrypt似乎不是一个本机PHP函数,我在多个服务器上传递这个变量。不过,调查如何安装此扩展可能是一种选择。实际上,我并没有从数据库中提取任何数据,我只是在做一些类似于选择AES_加密'somevalue','somekey'的事情。这在95%的情况下都很有效。提供示例并不是一个真正的选项,因为这将涉及泄露salt密钥和加密字符串。我们加密它们是有原因的!。感谢您的回复,我可以确认字符串长度不是问题。非常感谢您的提问和回答。这直接解决了我的问题。和您一样,我通过http将AES加密值作为查询字符串传递,但是我根本没有使用MySQL的AES加密/解密函数或MySQL,而是使用纯php phpseclib AES加密函数。因此,这似乎不是MySQL特有的,而是一个AES over http GET问题。我很惊讶这没有更多的点击率?这一定是罕见的事。我尝试了urlencode/rawurlencode和解码等所有可能的组合,但都没有成功。这种bin2hex和hex2bin溶液工作得非常好。