phpmcryptencryption

Decrypt string in php which was encrypted with aspEncrypt


I need to communicate with a asp platform that uses the aspEncrypt from persits. Can anyone provide an example how to decode a string with PHP and mcrypt that was created via the aspEncrypt routines.

An example page of aspEncrypt is available at this link: http://support.persits.com/encrypt/demo_text.asp

So if I use the text "Test" and the key "test" it provides an base64 encoded string. I need a php example that convert this encoded string back to the text "Test" with usage of key "test".


Solution

  • This is how i finally solved it:

    Expectation:

    In my special case all received data hex encoded. This means IV and encrypted text.

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

    A corresponding encryption works like that:

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