Вопрос

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.

Другие советы

You are using random padding bytes, per ISO10126. So the results will not be the same each time, even with all inputs the same.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top