Aes加密.少了一个重要的部分

本文关键字:重要的部 少了一个 加密 Aes | 更新日期: 2023-09-27 18:13:39

我在静态加密类中有一个方法,看起来像这样:

    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();
                }
            }
        }
    }

我有一个像这样的单元测试:

    [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);
    }

每次运行此命令时,text值都会发生变化。我希望它是常数,给定相同的输入。是我的期望错了,还是我做错了什么?

Aes加密.少了一个重要的部分

你的假设是不正确的。

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

您正在使用随机填充字节,根据ISO10126。因此,即使所有输入都相同,结果也不会每次都相同。