AES 中的流密码加密
stream cypher encryption in AES
我在 C# 中实现了 AES 256 位算法,但我正在加密需要填充的 128 位纯文本块,所以我不想填充并希望使用流式密码
- 使用流密码而不是使用 128 位块
逐字节加密流
CryptLib _crypt = new CryptLib();
//string plainText = "This is the text to be encrypted";
String iv = CryptLib.GenerateRandomIV(16); //16 bytes = 128 bits
string key = CryptLib.getHashSha256("my secret key", 31); //32 bytes = 256 bits
MessageBox.Show(arm);//////////////////////
String cypherText = _crypt.encrypt(string1, key, iv);
Console.WriteLine("iv=" + iv);
Console.WriteLine("key=" + key);
Console.WriteLine("Cypher text=" + cypherText);
MessageBox.Show(cypherText);
textBox1.Text = cypherText;
Console.WriteLine("Plain text =" + _crypt.decrypt(cypherText, key, iv));
MessageBox.Show(_crypt.decrypt(cypherText, key, iv));
String dypher = _crypt.decrypt(cypherText, key, iv);
string outp = string.Empty;
char[] value = dypher.ToCharArray();
如果输入数据总是块大小的精确倍数,您可以不指定填充。
如果您有未知的非统一块长度数据,填充是处理该问题的一般方法。
你为什么不想使用填充。
此外:
通常在加密数据前加上 IV 以供解密时使用。 IV 不需要保密,使用这种方法,IV 不需要以其他方式共享,并且可以很容易地为每次加密设置不同的随机值。
使用散列函数从密码(字符串)派生密钥不被认为是安全的,而是使用密钥派生函数,例如 PBKDF2.
我在 C# 中实现了 AES 256 位算法,但我正在加密需要填充的 128 位纯文本块,所以我不想填充并希望使用流式密码
- 使用流密码而不是使用 128 位块
逐字节加密流
CryptLib _crypt = new CryptLib(); //string plainText = "This is the text to be encrypted"; String iv = CryptLib.GenerateRandomIV(16); //16 bytes = 128 bits string key = CryptLib.getHashSha256("my secret key", 31); //32 bytes = 256 bits MessageBox.Show(arm);////////////////////// String cypherText = _crypt.encrypt(string1, key, iv); Console.WriteLine("iv=" + iv); Console.WriteLine("key=" + key); Console.WriteLine("Cypher text=" + cypherText); MessageBox.Show(cypherText); textBox1.Text = cypherText; Console.WriteLine("Plain text =" + _crypt.decrypt(cypherText, key, iv)); MessageBox.Show(_crypt.decrypt(cypherText, key, iv)); String dypher = _crypt.decrypt(cypherText, key, iv); string outp = string.Empty; char[] value = dypher.ToCharArray();
如果输入数据总是块大小的精确倍数,您可以不指定填充。
如果您有未知的非统一块长度数据,填充是处理该问题的一般方法。 你为什么不想使用填充。
此外:
通常在加密数据前加上 IV 以供解密时使用。 IV 不需要保密,使用这种方法,IV 不需要以其他方式共享,并且可以很容易地为每次加密设置不同的随机值。
使用散列函数从密码(字符串)派生密钥不被认为是安全的,而是使用密钥派生函数,例如 PBKDF2.