【发布时间】:2011-10-02 14:25:01
【问题描述】:
我一直在尝试找出使用 DES 算法加密 byte[16] 变量的正确方法。场景如下:
- 数据应以 8 字节部分加密。加密密钥为:
byte[] {11, 11, 11, 11, 11, 11, 11, 11} - 前 8 个字节使用
Instance Vector = new byte[8]加密(8 个字节,值为 0)。 - 加密的结果将是接下来 8 个字节的 IV。 (这是 CBC 吗?)
- 最后 8 个字节是我应该发送的结果。
有了这些信息,我实现了Encrypt方法如下:
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;
}
这是使用 DES 加密技术加密数据的正确方法吗?
【问题讨论】:
-
您可能希望接受 IV 作为此函数的输入。顾名思义,它毕竟是初始向量。此外,由于您要丢弃除最后一个块之外的所有加密数据,因此这并不是真正的加密。它是 MAC(消息验证码)——本质上是一种共享秘密签名机制。
标签: .net encryption des