首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rijndael加密/解密

Rijndael加密/解密
EN

Stack Overflow用户
提问于 2011-05-19 15:25:40
回答 1查看 1K关注 0票数 1

我有以下用于加密和解密的代码。问题是,在解密时,除了解密的文本之外,我还会在文本后面加上一些"aaaaa“。为什么?我需要一些帮助。谢谢!

代码语言:javascript
复制
public static byte[] Encrypt(byte[] PlainTextBytes, string key , string InitialVector)
        {
            try
            {
                System.Text.ASCIIEncoding encoding = new System.Text.ASCIIEncoding();
               Byte[] KeyBytes = encoding.GetBytes(key);
                byte[] InitialVectorBytes = encoding.GetBytes(InitialVector); 
                RijndaelManaged SymmetricKey = new RijndaelManaged();
                ICryptoTransform Encryptor = SymmetricKey.CreateEncryptor(KeyBytes, InitialVectorBytes);
                MemoryStream MemStream = new MemoryStream();
                CryptoStream CryptoStream = new CryptoStream(MemStream, Encryptor, CryptoStreamMode.Write);

                CryptoStream.Write(PlainTextBytes, 0, PlainTextBytes.Length);
                CryptoStream.FlushFinalBlock();
                byte[] CipherTextBytes = MemStream.ToArray();

               return CipherTextBytes;

//描述

代码语言:javascript
复制
public static string Decrypt(byte[] PlainTextBytes1, string key, string InitialVector)
    {
        System.Text.ASCIIEncoding encoding = new System.Text.ASCIIEncoding();
        Byte[] KeyBytes = encoding.GetBytes(key);
        RijndaelManaged SymmetricKey = new RijndaelManaged();
        byte[] InitialVectorBytes = Encoding.UTF8.GetBytes(InitialVector);

        ICryptoTransform Decryptor = SymmetricKey.CreateDecryptor(KeyBytes, InitialVectorBytes);
        MemoryStream MemStream1 = new MemoryStream(PlainTextBytes1);
        CryptoStream CryptoStream = new CryptoStream(MemStream1, Decryptor, CryptoStreamMode.Read);
        Byte[] pltxt = new byte[PlainTextBytes1.Length];
        CryptoStream.Read(pltxt, 0, pltxt.Length);

         ASCIIEncoding textConverter = new ASCIIEncoding();

         round = textConverter.GetString(pltxt);
          return round;

    }

我哪里错了?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-05-19 15:31:17

在你的decrypt函数中有:

代码语言:javascript
复制
Byte[] pltxt = new byte[PlainTextBytes1.Length];

这是错误的,因为cypher文本比纯文本更长,因为它被填充以获得块大小的倍数。

代码语言:javascript
复制
 CryptoStream.Read(pltxt, 0, pltxt.Length);

Read返回实际返回的字节数。它不能保证返回的字节数与请求的字节数一样多。

然后还有许多其他的缺陷/糟糕的风格:

传递给Decrypt的参数叫做,它应该叫做

  1. ,就像你从字符串中创建Decrypt/ PlainTextBytes1字节一样。在这里,ASCII编码是一个糟糕的选择。ASCII不能表示任何字节字符串。也许你想对一个两倍于instead?
  2. ASCII密钥大小的字符串进行十六进制的编码/解码,明文将只对ASCII码字符起作用,而不会破坏所有其他字符。为什么不使用UTF-8utf-8 instead?
  3. .net命名约定,比如参数

应该使用小写名称

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

https://stackoverflow.com/questions/6055201

复制
相关文章

相似问题

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