Aes加密...缺少一个重要的部分 [英] Aes Encryption... missing an important piece

查看:208
本文介绍了Aes加密...缺少一个重要的部分的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的静态加密类中有一个方法,如下所示:

  public static byte [] EncryptString(string toEncrypt ,byte [] encryptionKey)
{
var toEncryptBytes = Encoding.UTF8.GetBytes(toEncrypt);
using(var provider = new AesCryptoServiceProvider())
{
provider.Key = encryptionKey;
provider.Mode = CipherMode.ECB;
provider.Padding = PaddingMode.ISO10126;
using(var encryptor = provider.CreateEncryptor(provider.Key,provider.IV))
{
using(var ms = new MemoryStream())
{
使用(var cs = new CryptoStream(ms,encryptor,CryptoStreamMode.Write))
{
cs.Write(toEncryptBytes,0,toEncryptBytes.Length);
cs.FlushFinalBlock();
}
return ms.ToArray();
}
}
}
}

有一个单元测试如下所示:

  [TestMethod] 
public void EncryptStringEncryptsTest()
{
var toEncrypt =我要加密的文本;
var encryptionKey = Convert.FromBase64String(93mcgv9UBYpwgoUX0AXEaU1BqTCufPWPkFdOdoILLDA =);
var encrypted = Encryption.EncryptString(toEncrypt,encryptionKey);

var text = Convert.ToBase64String(encrypted);
Assert.IsTrue(false);
}

每次运行时, code>值更改。给予相同的投入,我希望它是不变的。我有错误的期望,或者我做错了吗?

解决方案

你的假设是不正确的。
$ b

ISO10126填充将附加随机数据以将消息填充到块大小的倍数。


I have a method in my static Encryption class that looks like this:

    public static byte[] EncryptString(string toEncrypt, byte[] encryptionKey)
    {
        var toEncryptBytes = Encoding.UTF8.GetBytes(toEncrypt);
        using (var provider = new AesCryptoServiceProvider())
        {
            provider.Key = encryptionKey;
            provider.Mode = CipherMode.ECB;
            provider.Padding = PaddingMode.ISO10126;
            using (var encryptor = provider.CreateEncryptor(provider.Key, provider.IV))
            {
                using (var ms = new MemoryStream())
                {
                    using (var cs = new CryptoStream(ms, encryptor, CryptoStreamMode.Write))
                    {
                        cs.Write(toEncryptBytes, 0, toEncryptBytes.Length);
                        cs.FlushFinalBlock();
                    }
                    return ms.ToArray();
                }
            }
        }
    }

I have a unit test that looks like this:

    [TestMethod]
    public void EncryptStringEncryptsTest()
    {
        var toEncrypt = "My text to encrypt";
        var encryptionKey = Convert.FromBase64String("93mcgv9UBYpwgoUX0AXEaU1BqTCufPWPkFdOdoILLDA=");
        var encrypted = Encryption.EncryptString(toEncrypt, encryptionKey);

        var text = Convert.ToBase64String(encrypted);
        Assert.IsTrue(false);
    }

Every time I run this, the text value changes. I would expect it to be constant, given the same inputs. Am I wrong to expect that, or am I doing something wrong?

解决方案

Your assumption is incorrect.

ISO10126 padding will append random data to pad your message to a multiple of the block size.

这篇关于Aes加密...缺少一个重要的部分的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆