首页
学习
活动
专区
圈层
工具
发布

AES加密
EN

Stack Overflow用户
提问于 2010-04-18 20:41:08
回答 2查看 643关注 0票数 0

为什么我只能加密16个字符的文本?

作品:

代码语言:javascript
复制
string plainText = "1234567890123456";

不管用:

代码语言:javascript
复制
string plainText = "12345678901234561";

不管用:

代码语言:javascript
复制
string plainText = "123456789012345";

代码:

代码语言:javascript
复制
string plainText = "1234567890123456";
byte[] plainTextBytes = Encoding.UTF8.GetBytes(plainText);

byte[] keyBytes = System.Text.Encoding.UTF8.GetBytes("1234567890123456");

byte[] initVectorBytes = System.Text.Encoding.UTF8.GetBytes("1234567890123456");

RijndaelManaged symmetricKey = new RijndaelManaged();
symmetricKey.Mode = CipherMode.CBC;
symmetricKey.Padding = PaddingMode.Zeros;

ICryptoTransform encryptor = symmetricKey.CreateDecryptor(keyBytes, initVectorBytes);

MemoryStream memoryStream = new MemoryStream();

CryptoStream cryptoStream = new CryptoStream(memoryStream, encryptor, CryptoStreamMode.Write);

cryptoStream.Write(plainTextBytes, 0, plainTextBytes.Length);

cryptoStream.FlushFinalBlock();

byte[] cipherTextBytes = memoryStream.ToArray();

memoryStream.Close();
cryptoStream.Close();

string cipherText = Convert.ToBase64String(cipherTextBytes);

Console.ReadLine();
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-04-18 20:49:50

不确定我是否理解这个问题,但是看看我假设代码的意图是什么

代码语言:javascript
复制
symmetricKey.CreateDecryptor

很可能是

代码语言:javascript
复制
symmetricKey.CreateEncryptor
票数 3
EN

Stack Overflow用户

发布于 2010-04-18 20:44:03

可能是因为AES是块密码,每个块有128位。也许您只需要添加一个类似于length % 128 == 0的填充。

(我不是C#开发人员,但可能会发生一个实现不关心自己添加填充的情况)

只是一个提示:如果它适用于256位,那就试试。

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

https://stackoverflow.com/questions/2663862

复制
相关文章

相似问题

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