gpt4 book ai didi

c# - C# 加密库如何处理小于加密算法所需 key 大小的 key ?

转载 作者:太空宇宙 更新时间:2023-11-03 12:16:01 24 4
gpt4 key购买 nike

让我们以需要 192 位 key 的 TripesDES 算法为例。C# 如何处理较小的 key ?假设 128 位 key (参见下面的示例)

在 nodejs 中尝试使用较小的 key 将抛出“无效 key 大小”错误。 C# 继续并输出加密。我想内部使用了某种类型的填充?如果是这样,哪个填充?我认为 PKCS7 仅用于填充每个加密 block ,对吗?它与加密 key 本身无关。

    var cryptoProvider = new TripleDESCryptoServiceProvider
{
Key = new byte[]
{
0xAA,
0xAA,
0xAA,
0xAA,
0xAA,
0xAA,
0xAA,
0xAA,
0xAA,
0xAA,
0xAA,
0xAA,
0xAA,
0xAA,
0xAA,
0xAA
},
Mode = CipherMode.ECB,
Padding = PaddingMode.PKCS7
};
var encryptor = cryptoProvider.CreateEncryptor();
var token = encryptor.TransformFinalBlock(bytes, 0, bytes.Length);

最佳答案

Let's use as an example the TripesDES algorithm which requires a 192bit key

这不完全正确。 TripleDES 基本上使用 3 个 key 应用 DES 3 次。这 3 个键可以是:

  • 人人平等。那是普通的 DES。我们可以忽略该选项
  • 完全不同。这就是您所期望的,192 位 key (3 个 key 组合)
  • 2 个键相同,第 3 个不同。比所有 key 都不同时更弱,但仍比常规 DES 强。这给了我们 128 位 key (2 个 key 组合)。

.NET 实现支持最​​后两个选项,因此当您使用 128 位 key 时(就像您在问题中所做的那样)- 它会将其拆分为 2 个 key 并使用其中一个(第一个)作为第三个 key ,因此结果您将第 1 和第 3 个键相同。

请注意,.NET 将验证您的 key 不是“弱”三重 DES key ,因此对于您问题中的示例,它将抛出异常,因为您的 key 的左半部分和右半部分是相同的,给定以上,将导致使用 3 个相同的 key 进行加密,因此整个过程将简化为常规 DES。

一般来说,.NET 会验证您传递的 key 是否具有给定算法的合法大小。

您可以先用一些 16 字节的 key 加密来验证以上内容:

var key = new byte[] {
0xAA,
0xAA,
0xAA,
0xAA,
0xAA,
0xAA,
0xAA,
0xAA,
0xAA,
0xAA,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00
};

然后手动将前 8 个字节附加到末尾以获得 24 字节的 key :

var fullKey = key.Concat(key.Take(8)).ToArray()

并用它解密(它会很好地解密,因为 16 字节和 24 字节的 key 与上述相同)。

关于c# - C# 加密库如何处理小于加密算法所需 key 大小的 key ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49752394/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com