Replicate T-SQL DecryptByPassPhrase in C#

后端 未结 1 1273
悲哀的现实
悲哀的现实 2021-01-05 00:08

I wnat to create a C# class to decrypt a byte array encrypted using T-SQL\'s EncryptByPassPhrase. (Yes, I know I could decrypt within SQL Server, but what I need is to be a

相关标签:
1条回答
  • 2021-01-05 00:25

    (1) Use C# to generate a key/iv pair: TripleDESCryptoServiceProvider cp = new TripleDESCryptoServiceProvider();

                MemoryStream m = new MemoryStream(Convert.FromBase64String(Convert.ToBase64String(ASCIIEncoding.ASCII.GetBytes(plainText))));
    
                CryptoStream cs = new CryptoStream(m, cp.CreateEncryptor(cp.Key, cp.IV), CryptoStreamMode.Read);
    
                cp.Key = Convert.FromBase64String("BeaYzNeHfDb27OFYgaYHUd5HUJE2aZyI");
                cp.IV = Convert.FromBase64String("T/ENF5G4sCA=");
    
                string key = Convert.ToBase64String(cp.Key);
                string iv = Convert.ToBase64String(cp.IV);
                // write key/iv to a file here 
    

    (2) Once we have that, use code like this to encode

                TripleDESCryptoServiceProvider cp = new TripleDESCryptoServiceProvider();
                MemoryStream m = new MemoryStream(Convert.FromBase64String(Convert.ToBase64String(ASCIIEncoding.ASCII.GetBytes(plainText))));
    
                CryptoStream cs = new CryptoStream(m, cp.CreateEncryptor(cp.Key, cp.IV), CryptoStreamMode.Read);
    
                cp.Key = Convert.FromBase64String("the key value from above");
                cp.IV = Convert.FromBase64String("the iv value from above");
    
                string key = Convert.ToBase64String(cp.Key);
                string iv = Convert.ToBase64String(cp.IV);
    
                List<byte> r = new List<byte>();
                int x = 0;
                for (; x > -1; )
                {
                    x = cs.ReadByte();
                    if (x > -1)
                        r.Add((byte)x);
                }
                byte[] y = r.ToArray();
                string cypherText = Convert.ToBase64String(y);
    

    (3) Then to decode:

                TripleDESCryptoServiceProvider cp = new TripleDESCryptoServiceProvider();
                MemoryStream m = new MemoryStream(Convert.FromBase64String(cypherText));
                cp.Key = Convert.FromBase64String("the key value from above");
                cp.IV = Convert.FromBase64String("the iv value from above");
    
                CryptoStream cs = new CryptoStream(m, cp.CreateDecryptor(cp.Key, cp.IV), CryptoStreamMode.Read);
    
                StreamReader reader = new StreamReader(cs);
                string plainText = reader.ReadToEnd();
    
    0 讨论(0)
提交回复
热议问题