I am trying to send some encrypted data from a php application to be
decoded in a .Net application.  Both apps encode/decode a given string
but generate different encrypted results.  Anyone have any idea? Code
to follow:

php====>
<?php

// Designate string to be encrypted
$string = "This is a test";

// Encryption/decryption key
$key = pack('H*',md5("mysecretkey"));
echo "PHP:KeySize:";
echo mcrypt_get_key_size('tripledes', 'ecb')*8;
echo "<BR>";
echo "PHP:BlockSize:";
echo mcrypt_get_block_size('tripledes', 'ecb')*8;
echo "<BR>";



// Encryption Algorithm
$cipher_alg = MCRYPT_TRIPLEDES;
#$cipher_alg = ;
#$cipher_alg = ;

// Create the initialization vector for added security.
//$iv = mcrypt_create_iv(mcrypt_get_iv_size($cipher_alg,
MCRYPT_MODE_ECB), MCRYPT_RAND);

$iv = pack("H*","ec787813562c5be0");

// Output original string
echo "PHP:Original string:$string <br>";
echo "PHP:Original Key:". base64_encode($key)."<br>";
echo "PHP:Encryption Method: tripledes <br>";
echo "PHP:IV:".base64_encode($iv)."<br>";

// Encrypt $string
//$encrypted_string = mcrypt_encrypt($cipher_alg, $key, $string,
MCRYPT_MODE_CBC, $iv);
$encrypted_string = mcrypt_encrypt($cipher_alg, $key, $string,
MCRYPT_MODE_CFB, $iv);
$decrypted_string = mcrypt_decrypt($cipher_alg, $key,
$encrypted_string, MCRYPT_MODE_CFB, $iv);
echo "PHP:Encrypted string
Base64:".base64_encode($encrypted_string)."<br>";
echo "PHP:Decrypted string:$decrypted_string";
?>
<===================
PHP OUTPUTPHP:
KeySize:192
PHP:BlockSize:64
PHP:Original string:This is a test 
PHP:Original Key:NNLkJVyOa+s8QvJN/X5tqQ==
PHP:Encryption Method: tripledes 
PHP:IV:7Hh4E1YsW+A=
PHP:Encrypted string Base64:A+9SKuoLdZaATqa+qmTipg==
PHP:Decrypted string:This is a test

===========================>
C# (.NET)

using System;
using System.Security.Cryptography;
using System.Text;

namespace test
{
        class TryDes{

                public string EncryptTripleDES(string Plaintext,
string key) {
                        TripleDESCryptoServiceProvider DES = new
TripleDESCryptoServiceProvider();
                        MD5CryptoServiceProvider hashMD5 = new
MD5CryptoServiceProvider();

                        DES.Key =
hashMD5.ComputeHash(ASCIIEncoding.ASCII.GetBytes(key));
                        DES.Mode = CipherMode.CFB;
                        DES.IV = 
Convert.FromBase64String("7Hh4E1YsW+A=");
                        DES.Padding=PaddingMode.Zeros;

                        Console.WriteLine("");
                        Console.WriteLine("NET:KeySize:"+DES.KeySize);
                       
Console.WriteLine("NET:BlockSize:"+DES.BlockSize);
                        Console.WriteLine("NET:Original
String:"+Plaintext);
                        Console.WriteLine("NET:Original
Key:"+Convert.ToBase64String(DES.Key));
                        Console.WriteLine("NET:Encryption
Method:TripeDES");

                        //DES.Mode = CipherMode.ECB;
                        Console.WriteLine(
"NET:IV:"+Convert.ToBase64String(DES.IV));

                        ICryptoTransform DESEncrypt =
DES.CreateEncryptor(DES.Key,DES.IV);
                        byte[] Buffer =
ASCIIEncoding.ASCII.GetBytes(Plaintext);
                        return
Convert.ToBase64String(DESEncrypt.TransformFinalBlock(Buffer, 0,
Buffer.Length));
                }

                public string DecryptTripleDES(string base64Text,
string key){
                        TripleDESCryptoServiceProvider DES = new
TripleDESCryptoServiceProvider();

                        MD5CryptoServiceProvider hashMD5 = new
MD5CryptoServiceProvider();

                        DES.Key =
hashMD5.ComputeHash(ASCIIEncoding.ASCII.GetBytes(key));
                        DES.Mode = CipherMode.CFB;
                        DES.Padding=PaddingMode.Zeros;                
      DES.IV =  Convert.FromBase64String("7Hh4E1YsW+A=");

                        ICryptoTransform DESDecrypt =
DES.CreateDecryptor(DES.Key,DES.IV);
                        byte[] Buffer =
Convert.FromBase64String(base64Text);
                        return
ASCIIEncoding.ASCII.GetString(DESDecrypt.TransformFinalBlock(Buffer,
0, Buffer.Length));
                }
        }

        class Class1
        {
                static void Main(string[] args) {
                        TryDes md = new TryDes();
                        string secrekey = "mysecretkey";
                        string sometest = md.EncryptTripleDES("This is
a test",secrekey);
                        Console.WriteLine("NET:Encrypted string
Base64:"+sometest);
                        Console.WriteLine("NET:Decrypted
string:"+md.DecryptTripleDES(sometest,secrekey));
                        Console.WriteLine("");
                }
}
}
<======================
.Net Output

NET:KeySize:192
NET:BlockSize:64
NET:Original String:This is a test
NET:Original Key:NNLkJVyOa+s8QvJN/X5tqQ==
NET:Encryption Method:TripeDES
NET:IV:7Hh4E1YsW+A=
NET:Encrypted string Base64:qbGgiTZp9YTGOutg8IGlqw==
NET:Decrypted string:This is a test

-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to