![](/img/trans.png)
[英]Coldfusion 3DES encrypt make the encrypted result different to PHP `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.