tripleDES解密c#
tripleDES decryption c#
我得到一个 tripleDES 加密和编码的 base 64 字符串:
ABvAsOKcGXqc5uQ4O5Z53isJaH31Pa8+PeddljE4mSU=
我也得到:
密钥大小 = 128;
键 = 0123456789ABCDEF
iv = ABCDEFGH
我写出了下面的代码。我不断收到异常消息,说 "Bad PKCS7 padding. Invalid length 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);
有
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 短语
All Your Base Are Belong To Us!!
但是更好的方法是只改变两行
tDES.Padding = PaddingMode.None; // instead of PaddingMode.PKCS7
tDES.Mode = CipherMode.CBC; // instead of CipherMode.ECB
这是由 @MaartenBodewes here 建议的。
所以请随时取消接受答案,并删除重复的 :-)。
我得到一个 tripleDES 加密和编码的 base 64 字符串:
ABvAsOKcGXqc5uQ4O5Z53isJaH31Pa8+PeddljE4mSU=
我也得到:
密钥大小 = 128;
键 = 0123456789ABCDEF
iv = ABCDEFGH
我写出了下面的代码。我不断收到异常消息,说 "Bad PKCS7 padding. Invalid length 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);
有
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 短语
All Your Base Are Belong To Us!!
但是更好的方法是只改变两行
tDES.Padding = PaddingMode.None; // instead of PaddingMode.PKCS7
tDES.Mode = CipherMode.CBC; // instead of CipherMode.ECB
这是由 @MaartenBodewes here 建议的。
所以请随时取消接受答案,并删除重复的 :-)。