在php中解密字符串,用aspEncrypt加密

时间:2011-04-15 11:57:39

标签: php mcrypt encryption

我需要与使用persits的aspEncrypt的asp平台进行通信。 任何人都可以举例说明如何使用PHP和mcrypt解码字符串,这是通过aspEncrypt例程创建的。

此链接提供了aspEncrypt的示例页面: http://support.persits.com/encrypt/demo_text.asp

因此,如果我使用文本“Test”和密钥“test”,它提供了base64编码的字符串。我需要一个php示例,使用键“test”将此编码的字符串转换回文本“Test”。

3 个答案:

答案 0 :(得分:0)

这取决于它使用的密码,只要您知道密码和密钥就应该很容易解密,请查看mcrypt

答案 1 :(得分:0)

如果您知道加密使用的密码和模式,函数mcrypt_decrypt可以解密它。

http://uk3.php.net/manual/en/function.mcrypt-decrypt.php

答案 2 :(得分:0)

这就是我最终解决它的方式:

期望:

  • 知道密钥
  • IV已知(在我的情况下,编码数据的前32个字符)
  • 加密文字已知

在我的特殊情况下,所有收到的数据都是十六进制编 这意味着IV和加密文本。

function decrypt($sString, $sIv, $sKey, $iCipherAlg) {       
   $sDecrypted = mcrypt_decrypt($iCipherAlg, $sKey, $sString, MCRYPT_MODE_CBC, $sIv);
    return trim($sDecrypted);
}

function hex2bin($sData) {
    $iLen = strlen($sData);
    $sNewData = '';
    for($iCount=0;$iCount<$iLen;$iCount+=2) {
        $sNewData .= pack("C",hexdec(substr($sData,$iCount,2)));
    }
    return $sNewData;
} 

$sKey = 'this is my key';
// first 32 chars are IV
$sIv = hex2bin(substr($sEncodedData, 0, 32));
$sEncodedData = substr($sEncodedData, 32);
$sEncodedRaw = hex2bin($sEncodedData);
$sDecrypted = decrypt($sEncodedRaw, $sIv, $sKey, MCRYPT_RIJNDAEL_128);

相应的加密工作原理如下:

$sIv = mcrypt_create_iv(mcrypt_get_block_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC), MCRYPT_RAND);
$sKey = 'this is my key';
$sContent = 'a lot of content';
$sEncrypted = bin2hex(mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $sKey, $sContent, MCRYPT_MODE_CBC, $sIv));
$sFullEncodedText = bin2hex($sIv) . $sEncrypted;