对PHP中的ColdFusion加密字符串进行解密/重新加密
问题描述:
我处于不利的位置,我必须在现有的ColdFusion应用程序中维护功能。作为登录过程的一部分,Coldfusion应用程序使用加密的字符串存储cookie。对PHP中的ColdFusion加密字符串进行解密/重新加密
encrypt(strToEncrypt, theKey, "AES", "Base64")
我可以成功解密使用的mcrypt在PHP这个字符串和下面的代码
mcrypt_decrypt(
MCRYPT_RIJNDAEL_128,
base64_decode($theKey),
base64_decode($encrypted_string),
MCRYPT_MODE_ECB, "0000000000000000")
我现在已经在PHP中执行相同的加密,使ColdFusion的应用程序可以访问数据的需要cookie。
目前我有什么是
mcrypt_encrypt(MCRYPT_RIJNDAEL_128, base64_decode($theKey), $strToEncrypt, MCRYPT_MODE_ECB, "0000000000000000");
然而,这是等价的ColdFusion加密算法
decrypt(strToDecrypt, theKey, "AES", "Base64")
投掷Given final block not properly padded
误差不兼容。
任何帮助非常感谢。
詹姆斯
答
不知道有多少帮助,这将是但我有以下工作。我认为,使CF快乐,你必须垫你的加密到一定长度
加密在CF
Encrypt(data, encKey, 'AES/CBC/PKCS5Padding', encoding, encIv)
解密PHP
function Decode($data, $encKey, $encIv, $format = 'uu') {
if ($format === 'uu') {
$data = Convert_uudecode($data);
} else if ($format === 'hex') {
$data = Pack('H*', $data);
} else if ($format === 'base64') {
$data = Base64_Decode($data);
} else if ($format === 'url') {
$data = UrlDecode($data);
}
$data = MCrypt_decrypt(MCRYPT_RIJNDAEL_128, $encKey, $data, 'cbc', $encIv);
$pad = Ord($data{strlen($data)-1});
if ($pad > strlen($data)) return $data;
if (strspn($data, chr($pad), strlen($data) - $pad) != $pad) return $data;
return substr($data, 0, -1 * $pad);
}
加密在PHP
function Encode($data, $encKey, $encIv, $format = 'uu') {
$pad = 16 - (StrLen($data) % 16);
if ($pad > 0) {
$data .= Str_repeat(Chr($pad), $pad);
}
$data = MCrypt_encrypt(MCRYPT_RIJNDAEL_128, $encKey, $data, 'cbc', $encIv);
if ($format === 'uu') {
return Convert_uuencode($data);
} else if ($format === 'hex') {
return Bin2Hex($data);
} else if ($format === 'base64') {
return Base64_Encode($data);
} else if ($format === 'url') {
return UrlEncode($data);
}
}
解密于CF
Decrypt(data, encKey, 'AES/CBC/PKCS5Padding', encoding, encIv)
由于某些原因,我不记得,我赞成'uu'的编码。
+0
谢谢。我目前无法更新CF,但应该在未来,所以这将派上用场。 – WeeJames 2010-07-16 10:04:53
你'base64_encode()'mcrypt_encrypt()'的结果? – Tomalak 2010-07-07 16:38:59
另请参阅加密函数的ivorsalt和迭代参数:http://www.adobe.com/livedocs/coldfusion/7/htmldocs/wwhelp/wwhimpl/common/html/wwhelp.htm?context=ColdFusion_Documentation&file=00000457。 htm – 2010-07-07 21:30:04
@Tomalak是的,mcrypt_encrypt的结果是base64_encoded。 – WeeJames 2010-07-08 08:43:05