.net C语言中的DES加密#
我一直在试图找到使用DES算法加密字节[16]变量的正确方法。以下是场景:.net C语言中的DES加密#,.net,encryption,des,.net,Encryption,Des,我一直在试图找到使用DES算法加密字节[16]变量的正确方法。以下是场景: 数据应以8字节的部分进行加密。加密的密钥是:byte[]{11,11,11,11,11,11} 前8个字节使用实例向量=新字节[8]加密(8个字节,值为0) 加密结果将是接下来8个字节的IV。(这是CBC吗?) 最后8个字节是我应该发送的结果 有了这些信息,我实现了加密方法,如下所示: public static byte[] Encrypt(byte[] data) { var dataChunk = ne
- 数据应以8字节的部分进行加密。加密的密钥是:
byte[]{11,11,11,11,11,11}
- 前8个字节使用
加密(8个字节,值为0)实例向量=新字节[8]
- 加密结果将是接下来8个字节的IV。(这是CBC吗?)
- 最后8个字节是我应该发送的结果李>
加密
方法,如下所示:
public static byte[] Encrypt(byte[] data)
{
var dataChunk = new byte[8];
var IV = new byte[8];
var result = new byte[8];
var key = new byte[] { 11, 11, 11, 11, 11, 11, 11, 11 };
for (int counter = 0; counter < data.Length / 8; counter++)
{
// Copy the next 8-byte chunk.
Array.Copy(data, counter * 8, dataChunk, 0, 8);
var des = System.Security.Cryptography.DES.Create();
des.Key = key;
des.IV = IV;
des.Padding = PaddingMode.None;
ICryptoTransform cryptoTransform = des.CreateEncryptor(key, IV);
// Encrypt the datra chunk.
cryptoTransform.TransformBlock(dataChunk, 0, 8, result, 0);
// Set the new IV.
Array.Copy(result, IV, 8);
}
return result;
}
公共静态字节[]加密(字节[]数据)
{
var dataChunk=新字节[8];
var IV=新字节[8];
var结果=新字节[8];
var key=新字节[]{11,11,11,11,11,11,11};
用于(int计数器=0;计数器
这是使用DES加密技术加密数据的正确方法吗?您不需要为每个块创建加密程序加密机本身实现操作模式(CBC,…)和填充。 所以你需要这样的东西:
byte[] input = ...
byte[] key = ...
byte[] iv = ...
using (DES des = DES.Create())
{
des.Mode = CipherMode.CBC;
des.Padding = PaddingMode.None;
using (ICryptoTransform encryptor = des.CreateEncryptor(key , iv))
{
byte[] output = encryptor.TransformFinalBlock(input, 0, input.Length);
}
}
我忽略了在这里使用DES的警告。您可能还想在以后查看更简单的加密和解密…您不需要为每个块创建加密程序加密机本身实现操作模式(CBC,…)和填充。 所以你需要这样的东西:
byte[] input = ...
byte[] key = ...
byte[] iv = ...
using (DES des = DES.Create())
{
des.Mode = CipherMode.CBC;
des.Padding = PaddingMode.None;
using (ICryptoTransform encryptor = des.CreateEncryptor(key , iv))
{
byte[] output = encryptor.TransformFinalBlock(input, 0, input.Length);
}
}
我忽略了在这里使用DES的警告。您可能还想在以后查看更简单的加密和解密…我无法帮助您使用C#,但我可以尝试解决您的最后一个问题:这是否是加密的“正确方式”。这个答案取决于你期望做什么 您实现的是一种称为CBC-MAC的模式;它不允许接收方恢复消息(因此根本不是真正的“加密”);其中一个线索是消息是16字节,但“加密”消息只有8字节。它确实具有这样的特性,中间的人很难修改消息,并得到正确的8字节MAC值(假设它们没有密钥);因此,像这样的东西通常被用作加密强完整性检查。现在,CBC-MAC确实存在长度扩展攻击问题;如果您不关心长度扩展攻击(所有消息都是16字节),这对您可能并不重要 CBC-MAC是否适合您的应用程序?嗯,我不知道答案;给你的关键问题是:
- 你想干什么?您是否正在尝试“加密”消息(以便另一方可以恢复它)?或者,您是在试图证明该消息是由带钥匙的人发送的吗
- 你想和别人和睦相处吗?是否有其他人指定了此“加密”方法
- ortag决定省略DES的警告,但我想我会包括它们——DES可以用不完全不合理的工作量来破坏;它可能对你的妹妹,甚至可能是普通黑客是安全的,但如果你的对手有权访问一些计算机资源,他可以打破这个。如果这是一个问题,您将希望切换到更强大的密码,如AES
- 你想干什么?您是否正在尝试“加密”消息(以便另一方可以恢复它)?或者,您是在试图证明该消息是由带钥匙的人发送的吗
- 你想和别人和睦相处吗?是否有其他人指定了此“加密”方法
- ortag决定省略DES的警告,但我想我会包括它们——DES可以用不完全不合理的工作量来破坏;它可能对你的妹妹,甚至可能是普通黑客是安全的,但如果你的对手有权访问一些计算机资源,他可以打破这个。如果这是一个问题,您将希望切换到更强大的密码,如AES