php - URL参数中的加密值(mcrypt_encrypt)在请求时产生不同的结果。如何处理这种情况?

标签 php mysql optimization

我正在使用以下函数来加密字符串 ($str),并使用 key ($key) 来创建唯一 key 。

示例代码:

<?php

$key = "####";
$str = "123456789";

$encrypted_key = base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, md5($key), $str, MCRYPT_MODE_CBC, md5(md5($key))));

echo $encrypted_key; // 3rfmDKb/Ig5FuUnkY8fiHpqA3FD4PflXMksJw+6WAns=
?>

该函数返回由特殊字符(包括 '+' )组成的值。我将此值作为唯一 ID 存储在数据库中。

但是在某些情况下,我需要通过 URL 传递 $encrypted_key 。 IE;用于将其与RESFful Web 服务一起使用

示例网址:

www.example.com/index.php?encrypted_key=3rfmDKb/Ig5FuUnkY8fiHpqA3FD4PflXMksJw+6WAns=

但是当通过 URL 请求时,会将“+”解码为“空格”

代码:

echo $encrypted_key = $_REQUEST['encrypted_key'];

// 3rfmDKb/Ig5FuUnkY8fiHpqA3FD4PflXMksJw 6WAns=

此转换进一步影响数据库检查:

“3rfmDKb/Ig5FuUnkY8fiHpqA3FD4PflXMksJw 6WAns=”与“3rfmDKb/Ig5FuUnkY8fiHpqA3FD4PflXMksJw+6WAns=”

此外,我还担心将这些加密值存储到索引的 MySQL DB 列中。

这里应该采用什么最佳实践?任何建议将不胜感激。

最佳答案

此答案仅解决表示问题,而不解决可能错误的加密使用问题。

当您构建具有特殊表示规则(例如数据库查询、URL 中的路径、HTML 代码、JS 代码等)的对象时,您必须确保对值执行正确类型的编码,以便它们往返时不会造成损害.

对于数据库查询参数,不要使用字符串连接。使用准备好的语句和占位符。

对于 URL,请使用正确的 URL 编码函数或 URL 构建器来构建 URL,不要盲目连接字符串。

关于php - URL参数中的加密值(mcrypt_encrypt)在请求时产生不同的结果。如何处理这种情况?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31884136/

相关文章:

php - 单击链接后从特定 mysql 行传递变量

php - 根据给定单词创建每个字母的上/下字母排列

mysql - 按 Unix 时间戳字段的月份分组

PHP & MySQL 函数从数据库问题中删除未检查的类别

php - 一张表多字段还是两表少字段?

php - 如何从 php growl

php - 如何从 sql 数据库的一列填充 php 数组?

php - 以 JSON 格式存储多条记录时出错

编译器 -march 标志基准测试?

python-2.7 - 从大型数据库查询填充 Pandas 数据框的值 (Python)