I have a string encrypted in PHP that I would like to decrypt in C#. I used the tutorial below to do the encryption, but am having problems decrypting. Can anyone post an example on how to do this?
http://www.sanity-free.org/131/triple_des_between_php_and_csharp.html
Hope this helps:
class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine(Decrypt("47794945c0230c3d"));
    }
    static string Decrypt(string input)
    {
        TripleDES tripleDes = TripleDES.Create();
        tripleDes.IV = Encoding.ASCII.GetBytes("password");
        tripleDes.Key = Encoding.ASCII.GetBytes("passwordDR0wSS@P6660juht");
        tripleDes.Mode = CipherMode.CBC;
        tripleDes.Padding = PaddingMode.Zeros;
        ICryptoTransform crypto = tripleDes.CreateDecryptor();
        byte[] decodedInput = Decoder(input);
        byte[] decryptedBytes = crypto.TransformFinalBlock(decodedInput, 0, decodedInput.Length);
        return Encoding.ASCII.GetString(decryptedBytes);
    }
    static byte[] Decoder(string input)
    {
        byte[] bytes = new byte[input.Length/2];
        int targetPosition = 0;
        for( int sourcePosition=0; sourcePosition<input.Length; sourcePosition+=2 )
        {
            string hexCode = input.Substring(sourcePosition, 2);
            bytes[targetPosition++] = Byte.Parse(hexCode, NumberStyles.AllowHexSpecifier);
        }
        return bytes;
    }
}
                        If you are not tied to tripleDES, but just need to pass encrypted data between php and .net, this will work for you. It's in VB and C# below.
<?php
ini_set('display_errors', 1);
error_reporting(E_ALL);
// I blantantly stole, tweaked and happily used this code from: 
// Lord of Ports http://www.experts-exchange.com/M_1736399.html
$ky = 'lkirwf897+22#bbtrm8814z5qq=498j5'; // 32 * 8 = 256 bit key
$iv = '741952hheeyy66#cs!9hjv887mxx7@8y'; // 32 * 8 = 256 bit iv
$text = "Here is my data to encrypt!!!";
$from_vb = "QBlgcQ2+v3wd8RLjhtu07ZBd8aQWjPMfTc/73TPzlyA=";   // enter value from vb.net app here to test
$etext = encryptRJ256($ky, $iv, $text);
$dtext = decryptRJ256($ky, $iv, $etext);
$vtext = decryptRJ256($ky, $iv, $from_vb);
echo "<HR>orignal string: $text";
echo "<HR>encrypted in php: $etext";
echo "<HR>decrypted in php: $dtext";
echo "<HR>encrypted in vb: $from_vb";
echo "<HR>from vb decrypted in php: $vtext"; 
echo "<HR>If you like it say thanks! richard dot varno at gmail dot com";
exit;
function decryptRJ256($key,$iv,$string_to_decrypt)
{
    $string_to_decrypt = base64_decode($string_to_decrypt);
    $rtn = mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $key, $string_to_decrypt, MCRYPT_MODE_CBC, $iv);
    $rtn = rtrim($rtn, "\0\4");
    return($rtn);
}
function encryptRJ256($key,$iv,$string_to_encrypt)
{
    $rtn = mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $key, $string_to_encrypt, MCRYPT_MODE_CBC, $iv);
    $rtn = base64_encode($rtn);
    return($rtn);
}    
?>
Imports System
Imports System.Text
Imports System.Security.Cryptography
Imports System.IO
Module Module1
    ' I blantantly stole, tweaked and happily used this code from: 
    ' Lord of Ports http://www.experts-exchange.com/M_1736399.html
    Sub Main()
        'Shared 256 bit Key and IV here
        Dim sKy As String = "lkirwf897+22#bbtrm8814z5qq=498j5"  '32 chr shared ascii string (32 * 8 = 256 bit)
        Dim sIV As String = "741952hheeyy66#cs!9hjv887mxx7@8y"  '32 chr shared ascii string (32 * 8 = 256 bit)
        Dim sTextVal As String = "Here is my data to encrypt!!!"
        Dim eText As String
        Dim dText As String
        eText = EncryptRJ256(sKy, sIV, sTextVal)
        dText = DecryptRJ256(sKy, sIV, eText)
        Console.WriteLine("key: " & sKy)
        Console.WriteLine()
        Console.WriteLine(" iv: " & sIV)
        Console.WriteLine("txt: " & sTextVal)
        Console.WriteLine("encrypted: " & eText)
        Console.WriteLine("decrypted: " & dText)
        Console.WriteLine("If you like it say thanks! richard dot varno at gmail dot com")
        Console.WriteLine("press any key to exit")
        Console.ReadKey(True)
    End Sub
    Public Function DecryptRJ256(ByVal prm_key As String, ByVal prm_iv As String, ByVal prm_text_to_decrypt As String)
        Dim sEncryptedString As String = prm_text_to_decrypt
        Dim myRijndael As New RijndaelManaged
        myRijndael.Padding = PaddingMode.Zeros
        myRijndael.Mode = CipherMode.CBC
        myRijndael.KeySize = 256
        myRijndael.BlockSize = 256
        Dim key() As Byte
        Dim IV() As Byte
        key = System.Text.Encoding.ASCII.GetBytes(prm_key)
        IV = System.Text.Encoding.ASCII.GetBytes(prm_iv)
        Dim decryptor As ICryptoTransform = myRijndael.CreateDecryptor(key, IV)
        Dim sEncrypted As Byte() = Convert.FromBase64String(sEncryptedString)
        Dim fromEncrypt() As Byte = New Byte(sEncrypted.Length) {}
        Dim msDecrypt As New MemoryStream(sEncrypted)
        Dim csDecrypt As New CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Read)
        csDecrypt.Read(fromEncrypt, 0, fromEncrypt.Length)
        Return (System.Text.Encoding.ASCII.GetString(fromEncrypt))
    End Function
    Public Function EncryptRJ256(ByVal prm_key As String, ByVal prm_iv As String, ByVal prm_text_to_encrypt As String)
        Dim sToEncrypt As String = prm_text_to_encrypt
        Dim myRijndael As New RijndaelManaged
        myRijndael.Padding = PaddingMode.Zeros
        myRijndael.Mode = CipherMode.CBC
        myRijndael.KeySize = 256
        myRijndael.BlockSize = 256
        Dim encrypted() As Byte
        Dim toEncrypt() As Byte
        Dim key() As Byte
        Dim IV() As Byte
        key = System.Text.Encoding.ASCII.GetBytes(prm_key)
        IV = System.Text.Encoding.ASCII.GetBytes(prm_iv)
        Dim encryptor As ICryptoTransform = myRijndael.CreateEncryptor(key, IV)
        Dim msEncrypt As New MemoryStream()
        Dim csEncrypt As New CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write)
        toEncrypt = System.Text.Encoding.ASCII.GetBytes(sToEncrypt)
        csEncrypt.Write(toEncrypt, 0, toEncrypt.Length)
        csEncrypt.FlushFinalBlock()
        encrypted = msEncrypt.ToArray()
        Return (Convert.ToBase64String(encrypted))
    End Function
End Module
using System;
using System.IO;
using System.Security.Cryptography;
using System.Text;
class Program {
  static void Main(string[] args) {
    //Shared 256 bit Key and IV here
    const string sKy = "lkirwf897+22#bbtrm8814z5qq=498j5"; //32 chr shared ascii string (32 * 8 = 256 bit)
    const string sIV = "741952hheeyy66#cs!9hjv887mxx7@8y"; //32 chr shared ascii string (32 * 8 = 256 bit)
    var sTextVal = "Here is my data to encrypt!!!";
    var eText = EncryptRJ256(sKy, sIV, sTextVal);
    var dText = DecryptRJ256(sKy, sIV, eText);
    Console.WriteLine("key: " + sKy);
    Console.WriteLine();
    Console.WriteLine(" iv: " + sIV);
    Console.WriteLine("txt: " + sTextVal);
    Console.WriteLine("encrypted: " + eText);
    Console.WriteLine("decrypted: " + dText);
    Console.WriteLine("press any key to exit");
    Console.ReadKey(true);
  }
  public static string DecryptRJ256(string prm_key, string prm_iv, string prm_text_to_decrypt) {
    var sEncryptedString = prm_text_to_decrypt;
    var myRijndael = new RijndaelManaged() {
      Padding = PaddingMode.Zeros,
      Mode = CipherMode.CBC,
      KeySize = 256,
      BlockSize = 256
    };
    var key = Encoding.ASCII.GetBytes(prm_key);
    var IV = Encoding.ASCII.GetBytes(prm_iv);
    var decryptor = myRijndael.CreateDecryptor(key, IV);
    var sEncrypted = Convert.FromBase64String(sEncryptedString);
    var fromEncrypt = new byte[sEncrypted.Length];
    var msDecrypt = new MemoryStream(sEncrypted);
    var csDecrypt = new CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Read);
    csDecrypt.Read(fromEncrypt, 0, fromEncrypt.Length);
    return (Encoding.ASCII.GetString(fromEncrypt));
  }
  public static string EncryptRJ256(string prm_key, string prm_iv, string prm_text_to_encrypt) {
    var sToEncrypt = prm_text_to_encrypt;
    var myRijndael = new RijndaelManaged() {
      Padding = PaddingMode.Zeros,
      Mode = CipherMode.CBC,
      KeySize = 256,
      BlockSize = 256
    };
    var key = Encoding.ASCII.GetBytes(prm_key);
    var IV = Encoding.ASCII.GetBytes(prm_iv);
    var encryptor = myRijndael.CreateEncryptor(key, IV);
    var msEncrypt = new MemoryStream();
    var csEncrypt = new CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write);
    var toEncrypt = Encoding.ASCII.GetBytes(sToEncrypt);
    csEncrypt.Write(toEncrypt, 0, toEncrypt.Length);
    csEncrypt.FlushFinalBlock();
    var encrypted = msEncrypt.ToArray();
    return (Convert.ToBase64String(encrypted));
  }
}
                        If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With