2011-04-15 72 views
0

我需要與使用persing的aspEncrypt的asp平臺進行通信。 任何人都可以提供一個例子,說明如何使用通過aspEncrypt例程創建的PHP和mcrypt解碼字符串。解密在php中用aspEncrypt加密的字符串

aspEncrypt的一個例子頁面,請點擊此鏈接: http://support.persits.com/encrypt/demo_text.asp

所以,如果我用文字「測試」和關鍵「測試」它提供了一個base64編碼字符串。我需要一個php示例,將這個編碼的字符串轉換回使用關鍵字「test」的文本「Test」。

+0

哪個密碼是使用ASP腳本? – 2011-04-15 12:00:06

+0

它使用RC2,但您可以選擇它應該是哪個密碼。但是使用哪種密碼並不重要,它不起作用。 – 2011-04-15 16:22:12

回答

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; 
0

這取決於它使用哪種密碼,只要你知道密碼和密鑰,它應該很容易解密,看看mcrypt

+0

沒有機會。你可以自己嘗試一下。打開鏈接,輸入密鑰和文本,選擇一個密碼,然後嘗試用php – 2011-04-15 16:24:20

0

如果您知道加密使用的密碼和模式,則功能mcrypt_decrypt可以對其解密。

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

+0

解密resut。我知道所有必需的東西(密鑰,密碼等),但看起來,aspencrypt創建的密鑰有點不同。 有沒有人有這個特殊的aspEncrypt模塊的經驗? – 2011-04-15 16:23:25