0

我需要与使用 aspEncrypt from persits 的 asp 平台进行通信。谁能提供一个示例,如何使用 PHP 和 mcrypt 解码通过 aspEncrypt 例程创建的字符串。

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

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

4

3 回答 3

0

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

于 2011-04-15T12:01:32.770 回答
0

如果您知道加密使用的密码和模式,该函数mcrypt_decrypt可以对其进行解密。

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

于 2011-04-15T12:01:33.850 回答
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;
于 2011-04-21T14:37:07.140 回答