我已经看到了一些有关此问题的问题,但是根据我找到的链接却无法获得一种可行的方法。
我有一串用Coldfusion AES方法加密的数据,我可以用
解密cf东西...
decrypt(data, key, "AES", "Hex");
...结束cf内容
它会打印出正确的数据。
我一直在尝试获得这样的功能:
function cfDecrypt($key, $data){
$key = base64_decode($key);
$data = base64_decode($data);
return base64_encode(openssl_decrypt( $data, "aes-128-cbc" , $key, OPENSSL_RAW_DATA | OPENSSL_NO_PADDING));
}
在PHP中工作,但无济于事...并尝试了多种AES-#-#密码,但无法获得相同的输出。
我知道它也需要进行十六进制解密,但是我不确定该怎么做。
UPDATE
所以我将方法更改为:
function cfDecrypt($key, $data){
$key = base64_decode($key);
$data = hex2bin($data);
return openssl_decrypt( $data, "aes-128-cbc" , $key, OPENSSL_RAW_DATA | OPENSSL_NO_PADDING);
}
哪个可以给我“多少”正确的输出,但是最后似乎还有些膨胀。
预期输出:1234123412341234
实际输出:1234123412341234�X> 3Q�m[,�N
所以我必须靠近!
UPDATE
我最终选择了:
<?php
function stripPadding($data){
$len = strlen($data);
if($data == ""){return "No CC on File.";}
if($len == 32){return substr($data, 0, 16);
}else if($len == 16){return substr($data, 0, 15);
}else{ return "Bad CC Decrypt!";
}
}
function cfDecrypt($key, $data){
$key = base64_decode($key);
$data = hex2bin($data);
return stripPadding(openssl_decrypt( $data, "AES-128-ECB" , $key, OPENSSL_NO_PADDING));
}
?>