在C#中实现DES
本文关键字:DES 实现 | 更新日期: 2023-09-27 18:29:23
在Microsoft页面上,他们有一个如何使用内置库使用DES的教程:
private static void EncryptData(String inName, String outName, byte[] desKey, byte[] desIV)
{
//Create the file streams to handle the input and output files.
FileStream fin = new FileStream(inName, FileMode.Open, FileAccess.Read);
FileStream fout = new FileStream(outName, FileMode.OpenOrCreate, FileAccess.Write);
fout.SetLength(0);
//Create variables to help with read and write.
byte[] bin = new byte[100]; //This is intermediate storage for the encryption.
long rdlen = 0; //This is the total number of bytes written.
long totlen = fin.Length; //This is the total length of the input file.
int len; //This is the number of bytes to be written at a time.
DESCryptoServiceProvider des = new DESCryptoServiceProvider();
CryptoStream encStream = new CryptoStream(fout, des.CreateEncryptor(desKey, desIV), CryptoStreamMode.Write);
Console.WriteLine("Encrypting...");
//Read from the input file, then encrypt and write to the output file.
while (rdlen < totlen)
{
len = fin.Read(bin, 0, 100);
encStream.Write(bin, 0, len);
rdlen = rdlen + len;
Console.WriteLine("{0} bytes processed", rdlen);
}
encStream.Close();
fout.Close();
fin.Close();
}
我充分利用了它,但我不明白什么是desIV,以及如何调用函数来测试它。。有人能帮忙吗?
这可能不是一个非常技术性的解释,但我想理解这一点的一个很好的方法是考虑密码。
想象一下,攻击者可以下载你的整个登录数据库,并可以检索每个人的密码及其电子邮件帐户。但在此之前,他决定创建一些帐户(使用一些他知道的密码)。
如果加密只使用了一个密钥,也许有人可以通过一些未加密密码和加密密码的样本对(使用他之前创建的帐户)来尝试"解码"你的密钥,然后使用密钥+算法来解密整个数据库中的每个密码。更糟糕的情况是,具有相同密码的几个用户具有相同的加密结果——攻击者甚至不需要解密密钥就可以使用其他帐户。他只需要是一个很好的"已知密码"猜测者。
现在,让我们假设您可以在加密/解密时引入一些"ramdom"代码。I.E.:当用户选择密码"12345"而不是加密此密码时,您会加密他的电子邮件,也会连接"test@gmail.test12345',然后加密。由于不可能有两个不同的登录电子邮件,即使很多用户选择使用相同的密码,加密结果也会有所不同。此外,攻击者永远不会知道你输入了什么样的伪随机信息。这叫做"腌制"。
Salting和初始化向量没有太大区别,但使用了不同的约定——这是一个字节数组,但它意味着一个字符串。一些工程师甚至生成随机字符串作为salt,并将其与加密密码一起存储。盐是不可复制的,同样难以解密。