tripleDES解密c#

时间:2015-09-28 01:50:22

标签: c# encryption base64 tripledes

我获得了一个tripleDES加密和编码的基本64字符串:

ABvAsOKcGXqc5uQ4O5Z53isJaH31Pa8 + PeddljE4mSU =

我也得到了:

密钥大小= 128;

key = 0123456789ABCDEF

iv = ABCDEFGH

我已经写出了以下代码。我继续向我抛出一个异常,说"糟糕的PKCS7填充。长度无效31"我想在某个地方失去一个字节。任何人都可以告诉我我做错了什么。

string base64Encoded = "ABvAsOKcGXqc5uQ4O5Z53isJaH31Pa8+PeddljE4mSU="; // 
string ASCIIkey = "0123456789ABCDEF";
string ASCIIiv = "ABCDEFGH";


TripleDESCryptoServiceProvider tDES = new TripleDESCryptoServiceProvider();
tDES.KeySize = 128;
tDES.BlockSize = 64;
tDES.Padding = PaddingMode.PKCS7;
tDES.Mode = CipherMode.ECB;
tDES.Key = Encoding.ASCII.GetBytes(ASCIIkey);
tDES.IV = Encoding.ASCII.GetBytes (ASCIIiv);
byte[] encryptedData = Convert.FromBase64String(base64Encoded);
ICryptoTransform transform = tDES.CreateDecryptor();
byte[] plainText = transform.TransformFinalBlock(encryptedData, 0, encryptedData.Length);
string message = System.Text.Encoding.ASCII.GetString(plainText);
Console.Write (message);

1 个答案:

答案 0 :(得分:0)

使用

tDES.Mode = CipherMode.CBC;

并用作参考HashAlgorithm.TransformBlock sample(参见PrintHashMultiBlock

int offset = 0;
while(encryptedData.Length - offset >= size)
    offset += transform.TransformBlock(encryptedData, offset,
                                       encryptedData.Length - offset,
                                       outputBuffer, offset);

我能够获得known短语

  

你所有的基地都属于我们!!

然而,更好的方法是改变两行

tDES.Padding = PaddingMode.None;  // instead of PaddingMode.PKCS7
tDES.Mode = CipherMode.CBC;       // instead of CipherMode.ECB

这是由 @MaartenBodewes here建议的。

所以请随意取消接听答案,并删除副本: - )。

相关问题