Coldfusion解密(数据,密钥,“ AES”,“十六进制”)-openssl等效

时间:2018-08-22 18:31:28

标签: php encryption openssl aes

我已经看到了一些有关此问题的问题,但是根据我找到的链接却无法获得一种可行的方法。

我有一串用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));
 }
?>

0 个答案:

没有答案
相关问题