Hello to you all, I need to encrypt some data in ASP.NET and decrypt it in PHP. i Am almost doing it, but the end of the encrypted string is different from one another. Anyone has a clue? String to encode: Let us meet at 9 oclock at the secret place Key: its_my_secret Return PHP: jTD0Q9Utg09RBkhbAxPOLYw+cqQbG4HKFPJmzmuu/eeq7kyQhuj63gUhbLv6g1rx Return ASP.NET: jTD0Q9Utg09RBkhbAxPOLYw+cqQbG4HKFPJmzmuu/eeq7kyQhuj63ihSwMAkV0Ee Almost the same... Here is the code i am using: <?php //echo base64_encode("Let us meet at 9 oclock at the secret place"); $td = mcrypt_module_open('tripledes', '', 'cbc', ''); // $iv = mcrypt_create_iv(mcrypt_enc_get_iv_size($td), MCRYPT_DEV_RANDOM); $iv="ha123PXY"; $ks = mcrypt_enc_get_key_size($td); $key = substr(md5('its_my_secret'), 0, $ks); mcrypt_generic_init($td, $key, $iv); $encrypted = mcrypt_generic($td, 'Let us meet at 9 oclock at the secret place'); echo $encrypted . "<br>"; echo base64_encode($encrypted) . "<br>"; mcrypt_generic_deinit($td); mcrypt_generic_init($td, $key, $iv); $decrypted = mdecrypt_generic($td, $encrypted); mcrypt_generic_deinit($td); mcrypt_module_close($td); echo trim($decrypted) . "\n"; ?> <%@ Import Namespace="System" %> <%@ Import Namespace="System.Web" %> <%@ Import Namespace="System.io" %> <%@ Import Namespace="System.Data" %> <%@ Import Namespace="System.Data.SqlClient" %> <%@ Import Namespace="System.Security.Cryptography" %> <%@ Assembly Name="APi" %> <script runat="server"> Private Key As Byte() Private IV As Byte() Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) runTest() end sub Private Function runTest() Dim testResult As New StringBuilder Dim enc As New System.Text.ASCIIEncoding Dim plainKeyBytes As Byte() = enc.GetBytes("its_my_secret") Dim md5KeyBytes As Byte() = md5Hash(plainKeyBytes) 'get hexadecimal string representation of MD5 hash and take '24 bytes (128 bits) to use as key Key = enc.GetBytes(System.BitConverter.ToString(md5KeyBytes).Replace("-", "").ToLower.Substring(0, 24)) IV = enc.GetBytes("ha123PXY") Dim cryptText As Byte() Dim plainText As Byte() = enc.GetBytes("Let us meet at 9 o'clock at the secret place.") cryptText = Encrypt(plainText) RESPONSE.WRITE("<b>key:</b> " & enc.GetString(Key) & "<br>") RESPONSE.WRITE("<b>IV:</b> " & enc.GetString(IV) & "<br>") RESPONSE.WRITE("<b>encrypted ascii:</b> " & enc.GetString(cryptText) & "<br>") RESPONSE.WRITE("<b>len:</b> " & cryptText.Length & "<br>") RESPONSE.WRITE("<b>base64:</b> " & System.Convert.ToBase64String(cryptText) & "<br>") RESPONSE.WRITE("<b>decrypted:</b> " & enc.GetString(DeCrypt(cryptText))) 'lblTest.Text = testResult.ToString End Function Private Function md5Hash(ByVal data() As Byte) As Byte() Dim provider As New MD5CryptoServiceProvider Return provider.ComputeHash(data) End Function Private Function Encrypt(ByVal plainText() As Byte) As Byte() Dim cryptostream As CryptoStream Dim ms As New System.IO.MemoryStream '-- memory stream to write encrypted data to Dim tdes As New TripleDESCryptoServiceProvider Try '-- create TripleDES Encryptor from this instance Dim tdesEncrypt As ICryptoTransform = tdes.CreateEncryptor(Key, IV) '-- create Crypto Stream that transforms memory stream using des encryption cryptostream = New CryptoStream(ms, tdesEncrypt, CryptoStreamMode.Write) '-- write out and flush TripleDES encrypted file to memory stream With cryptostream .Write(plainText, 0, plainText.Length) .FlushFinalBlock() End With '-- return encrypted data Return ms.ToArray Catch e As Exception Throw e Finally '-- close streams If Not (cryptostream Is Nothing) Then cryptostream.Close() If Not (ms Is Nothing) Then ms.Close() End Try End Function Private Function DeCrypt(ByVal encryptedData() As Byte) As Byte() Dim ms As System.IO.MemoryStream '-- memory stream to write decrypted data to Dim cryptostreamDecr As CryptoStream Dim tdes As New TripleDESCryptoServiceProvider Try '-- create TripleDES instance and Decryptor Dim tdesDecrypt As ICryptoTransform = tdes.CreateDecryptor(Key, IV) '-- create crypto stream set to read and do a TripleDES decryption transform on incoming bytes ms = New MemoryStream(encryptedData) cryptostreamDecr = New CryptoStream(ms, tdesDecrypt, CryptoStreamMode.Read) '-- get the decrypted bytes Dim destArr() As Byte = New BinaryReader(cryptostreamDecr).ReadBytes(ms.Length * 2) Return destArr '-- return decrypted data Catch e As Exception Throw e Finally '-- close streams If Not (ms Is Nothing) Then ms.Close() '-- Don't use the following. It gives error "Stream does not support writing 'If Not (cryptostreamDecr Is Nothing) Then cryptostreamDecr.Close() End Try End Function </script>
you have a period at the end of your asp.net string and no period at the end of your php string. Also you have an apostrophe in your asp.net string that doesnt appear in your php string.
Stupid me. I copy pasted the wrong php file: Corrected Php (just the sentence is different) Corrected encrypted strings: PHP: jTD0Q9Utg09RBkhbAxPOLYw+cqQbG4HKFPJmzmuu/eeq7kyQhuj63iS/uKmuuYfs ASP.NET: jTD0Q9Utg09RBkhbAxPOLYw+cqQbG4HKFPJmzmuu/eeq7kyQhuj63ihSwMAkV0Ee Any ideas? <?php //echo base64_encode("Let us meet at 9 o\'clock at the secret place."); /* Open the cipher */ $td = mcrypt_module_open('tripledes', '', 'cbc', ''); /* Create the IV and determine the keysize length, used MCRYPT_RAND * on Windows instead */ // $iv = mcrypt_create_iv(mcrypt_enc_get_iv_size($td), MCRYPT_DEV_RANDOM); $iv="ha123PXY"; $ks = mcrypt_enc_get_key_size($td); /* Create key */ $key = substr(md5('its_my_secret'), 0, $ks); /* Intialize encryption */ mcrypt_generic_init($td, $key, $iv); /* Encrypt data */ $encrypted = mcrypt_generic($td, 'Let us meet at 9 o\'clock at the secret place.'); echo $encrypted . "<br>"; echo base64_encode($encrypted) . "<br>"; /* Terminate encryption handler */ mcrypt_generic_deinit($td); /* Initialize encryption module for decryption */ mcrypt_generic_init($td, $key, $iv); /* Decrypt encrypted string */ $decrypted = mdecrypt_generic($td, $encrypted); /* Terminate decryption handle and close module */ mcrypt_generic_deinit($td); mcrypt_module_close($td); /* Show string */ echo trim($decrypted) . "\n"; ?>