【发布时间】:2011-05-19 08:21:53
【问题描述】:
我有一个项目,它为 24 字节的数据块规定了以下加密规则。
1) 加密应该使用 9797-1 中定义为 MAC 的完整三重 DES MAC 算法来完成 算法 3 具有输出转换 3 没有截断并且 CBC 模式中的 DES 作为块 ICV 设置为零的密码。最后8个字节的加密数据构成了我们需要的值。
程序说加密是错误的。为了符合上述规范,我还需要做什么其他事情吗?
数据是一个 24 字节的值,加密的输出应该是 8 个字节,我猜(根据规范)。我得到了整个 24 个字节作为输出:(
我编写了以下代码来实现上述规范:
des.KeySize = 128;
des.Key = ParseHex(key);
des.Mode = CipherMode.CBC;
des.Padding = PaddingMode.None;
ICryptoTransform ic = des.CreateEncryptor();
CryptoOutput = ic.TransformFinalBlock(CryptoOutput, 0, 24);
我也试过这个:
MACTripleDES des = new MACTripleDES(ParseHex(key));
byte[] CDCryptp = des.ComputeHash(CryptoOutput);
【问题讨论】:
-
所以你是在做 MAC,而不是加密?所以你想生成 8 字节标签,如果我理解正确?你能链接到有问题的标准吗(我看不到 PDF,你必须购买它)
-
嗨 Henno。这是我第一次接触加密。我以为我正在使用 MACTripleDES 进行加密。你能解释一下两者之间的区别吗?
-
MAC 对消息进行身份验证。因此,您发送消息(明文或加密)并添加取决于消息的 MAC(称为标签)和与另一方共享的密钥。 MAC 确保没有人可以修改消息,因为修改器无法计算正确的标签(他需要密钥)。所以它确保了消息没有被篡改,同时也向对方表明发送者也知道生成标签的密钥,所以是“好”的。所以这是身份验证+完整性,而不是机密性。
-
"最后 8 个字节的加密数据构成了我们需要的值。" -- 输出是否应该只是密文的最后 8 个字节?
标签: c# hash cryptography des 3des