首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >tripleDES解密c#

tripleDES解密c#
EN

Stack Overflow用户
提问于 2015-09-28 01:50:21
回答 1查看 1.1K关注 0票数 1

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

ABvAsOKcGXqc5uQ4O5Z53isJaH31Pa8+PeddljE4mSU=

我还得到:

键大小= 128;

key = 0123456789ABCDEF

iv = ABCDEFGH

我已经写出了下面的代码。我一直被抛出一个异常,上面写着“糟糕的PKCS7填充。无效长度31”,我在某个地方丢失了一个字节。有人能告诉我我做错了什么吗?

代码语言:javascript
复制
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);
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-09-28 02:14:53

使用

代码语言:javascript
复制
tDES.Mode = CipherMode.CBC;

并用作参考HashAlgorithm.TransformBlock 示例 (参见PrintHashMultiBlock)

代码语言:javascript
复制
int offset = 0;
while(encryptedData.Length - offset >= size)
    offset += transform.TransformBlock(encryptedData, offset,
                                       encryptedData.Length - offset,
                                       outputBuffer, offset);

我得到了一个已知短语

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

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

代码语言:javascript
复制
tDES.Padding = PaddingMode.None;  // instead of PaddingMode.PKCS7
tDES.Mode = CipherMode.CBC;       // instead of CipherMode.ECB

这是由@MaartenBodewes 这里提出的。

因此,可以随意不接受答案,并删除重复的:-)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32814720

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档