【发布时间】:2009-12-29 08:21:39
【问题描述】:
我有一个类采用这种格式的字符串:
000067000000000012620060324b38e2cab3353
,加密字符串,然后将其作为获取变量附加到 URL 中。
进行加密的类有一个如下所示的函数:
private function _code_encryption($enc_type,$a_string){
$iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_CBC);
$iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
if($enc_type == self::ENCRYPT_STRING){
//encrypt then return base64 encoded
$encrypted = mcrypt_encrypt(MCRYPT_RIJNDAEL_256, self::AUTH_ENCRYPTION_KEY, $a_string, MCRYPT_MODE_CBC, $iv);
return base64_encode($encrypted);
}elseif($enc_type == self::DECRYPT_STRING){
$decrypted = mcrypt_decrypt(MCRYPT_RIJNDAEL_256, self::AUTH_ENCRYPTION_KEY, base64_decode($a_string), MCRYPT_MODE_CBC, $iv);
return trim($decrypted);
}
}
当字符串被加密时,我对值进行 urlencode 并将其添加到 url,就像 url 看起来像 "https://secure.mysite.com/index.php?action=someaction&transfer_code=XXXXX 其中 XXXX 是 urlencoded 加密字符串。
现在,当解析和处理 url 时,$_GET['transfer_code'] 的值被传递到上面的 _code_encryption 函数中,但没有返回正确解密的值,而是返回我的浏览器无法呈现的乱码。我用于加密/解密的密钥长度是否有要求?我尝试了类似
$key = hash('sha256',self::AUTH_ENCRYPTION_KEY,true);
但这也没用……
另外,我没有对 $_GET['transfer_code'] 变量进行 urldecoding,因为获取 vars 的 php 手册页状态已经被 urlencoded...
我应该在加密/base64_encoding 之前对字母数字字符串进行 UTF-8 编码,还是会有什么不同?
【问题讨论】:
标签: php url encryption encoding