关于 C# 中 Rijndael 类的使用?

3di 2005-12-22 06:08:37
这个算法的明密文长度应该是什么关系?
我用一下方法加密后,长度变的很长(20位的明文成了64位的密文):
public static string Encrypt(string pToEncrypt, string sKey, int keySize)
{
sKey = ProcessKey(sKey, keySize);
RijndaelManaged crypt = new RijndaelManaged();
//把字符串放到byte数组中
//原来使用的UTF8编码,我改成Unicode编码了,不行
byte[] inputByteArray = Encoding.Default.GetBytes(pToEncrypt);
//byte[] inputByteArray=Encoding.Unicode.GetBytes(pToEncrypt);

//建立加密对象的密钥和偏移量
//原文使用ASCIIEncoding.ASCII方法的GetBytes方法
//使得输入密码必须输入英文文本
crypt.KeySize = keySize * 8;
crypt.Key = ASCIIEncoding.ASCII.GetBytes(sKey);
crypt.IV = ASCIIEncoding.ASCII.GetBytes(sKey.Substring(0, 16));
MemoryStream ms = new MemoryStream();
CryptoStream cs = new CryptoStream(ms, crypt.CreateEncryptor(), CryptoStreamMode.Write);
//Write the byte array into the crypto stream
//(It will end up in the memory stream)
cs.Write(inputByteArray, 0, inputByteArray.Length);
cs.FlushFinalBlock();
//Get the data back from the memory stream, and into a string
StringBuilder ret = new StringBuilder();
foreach(byte b in ms.ToArray())
{
//Format as hex
ret.AppendFormat("{0:X2}", b);
}
return ret.ToString();
}

应该怎么减小密文长度?
...全文
299 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
zeusvenus 2005-12-23
  • 打赏
  • 举报
回复
如果明文分组的长度不是128位的整数倍,最后一个明文分组的长度就小于128位。如果填充‘00’或者其他数据使其长度也为128位,加密后的数据就大于明文的长度。为使加密后的数据长度与明文数据长度一致,采用“密码挪用法”来解决。
参见:
http://www.fcc.com.cn/MAGAZINE/shownews.asp?newsid=635

还有一种应用于IC卡数据加密的Rijndael改进算法参见:
http://www.wanfangdata.com.cn/qikan/periodical.Articles/jsjgc/jsjg2005/0501/050159.htm

另外可以看看:
http://www.cnblogs.com/jobs/archive/2005/03/20/122208.html
3di 2005-12-22
  • 打赏
  • 举报
回复
忘了说了,我的 Blocksize 因该是 128
3di 2005-12-22
  • 打赏
  • 举报
回复
好像不是这样的?
全部 ANSI 编码,
我试了一下,16 位以下(即 128 bit)的明文,加密后为 32 为 (256 bit)
16-31 -> 64
32-64 ->128
...
为什么会是这样的?
fanruinet 2005-12-22
  • 打赏
  • 举报
回复
64位是最小的单位了,小于等于64位的明文数据加密后都产生64位的密文,不能再小了

虽然20位明文产生64位密文,可这不是一个比例,Rijndael明密文的长度比还是1:1的

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧