我正在尝试使用128位AES加密(ECB)加密/解密字符串.我想知道的是如何添加/删除PKCS7填充.似乎Mcrypt扩展可以处理加密/解密,但必须手动添加/删除填充.
有任何想法吗?
起初,Coldfusion加密:
<cfset message = '1447841550'>
<cfset key = 'Mk9m98IfEblmPfrpsawt7BmxObt98Jev'>
<cfset ciphertext = Encrypt(#message#, #key#, "desede", "base64")>
<cfoutput>#ciphertext#</cfoutput>
Run Code Online (Sandbox Code Playgroud)
然后,PHP mcrypt:
$message = "1447841550";
$key = 'Mk9m98IfEblmPfrpsawt7BmxObt98Jev';
$key = base64_decode($key);
$bytes = array(0,0,0,0,0,0,0,0); //byte [] IV = {0, 0, 0, 0, 0, 0, 0, 0}
$iv = implode(array_map("chr", $bytes));
$ciphertext = mcrypt_encrypt(MCRYPT_3DES, $key, $message, MCRYPT_MODE_CBC, $iv);
echo base64_encode($ciphertext);
Run Code Online (Sandbox Code Playgroud)
问题.
在相同的字符串中,相同的算法和相同的编码.
仍然有一小部分输出不匹配.
以下是真实的样本输出.
// Coldfusion output.
n6lp0I1w5FwrP3yPw3s8bw==
^^^^^^^^^^
Same part
// PHP output.
n6lp0I1w5FxLQHskKMn4sw==
^^^^^^^^^^
Same part
Run Code Online (Sandbox Code Playgroud)
为什么Coldfusion会产生不同的结果?
如果不修改PHP代码,我怎么能在Coldfusion中产生相同的结果.PHP输出对我来说是正确的输出.
是否可以使用javascript获得正确的结果(PHP)?这个解决方案也很好.
我很沮丧.
PHP和ColdFusion9中的AES加密产生了不同的结果.有人可以帮帮我吗?
以下PHP代码
$key = "12345678123456781234567812345678";
$iv = "1234567812345678";
$data = "This is a plain string.";
echo base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key, $data, MCRYPT_MODE_CBC, $iv));
Run Code Online (Sandbox Code Playgroud)
给我G + tdEOfQTtVCQGxW3N5uzkqN207OyfIPxS6zf2xrKKY =
而下面的ColdFusion代码
<cfset thePlainData = "This is a plain string." />
<cfset theKey = "12345678123456781234567812345678" />
<cfset theAlgorithm = "AES/CBC/PKCS5Padding" />
<cfset theEncoding = "base64" />
<cfset theIV = "1234567812345678" />
<cfset encryptedString = encrypt(thePlainData, theKey, theAlgorithm, theEncoding, theIV) />
Run Code Online (Sandbox Code Playgroud)
给我KLt55n5/T3ee6xVq9VGFbyCacJznkHEqC/RDRhL + 4nw =
知道我哪里错了吗?提前致谢.