繁体   English   中英

URL参数中的加密值(mcrypt_encrypt)在请求时会生成不同的结果。如何解决这种情况?

[英]Encrypted values (mcrypt_encrypt) in URL parameters generating different results while requesting.How to tackle the situation?

我正在使用以下函数,使用密钥 ($ key)加密字符串 ($ str)以使其成为唯一密钥。

样例代码:

<?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。 与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,请勿盲目地将字符串连接起来。

首先,将加密值用作“唯一ID”或“条件字段”不是一个好主意,因为它们将更改为相同的值。 这在加密方面非常普遍。 如果加密算法未更改同一条目的结果,则它不是一个好的加密方法。

其次,在处理加密和URL时,我遇到了同样的问题,在我的情况下,我制定了自己的加密算法,只对URL使用有效字符。

实现加密并非难事:我使用了ASCII码,一个简单的密钥,一个简单的数学函数,仅此而已。 为了解密,我“逆转”了数学函数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM