Aes加密...缺少一个重要的部分 [英] Aes Encryption... missing an important piece
本文介绍了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屋!
查看全文