Security 如何创建DES密钥?为什么7个字符的字符串还不够?

Security 如何创建DES密钥?为什么7个字符的字符串还不够?,security,encryption,cryptography,key,des,Security,Encryption,Cryptography,Key,Des,我很难理解密码学中的密钥长度要求。我目前正在使用DES,我相信它是56位的。。。现在,通过将8个字符的密码转换为字节[]我的密码术就可以工作了。如果我使用7位密码,它不会 如果我错了,请原谅,这是因为ASCII字符是7位,所以8*7=56位吗 我觉得这不太对。如果我想使用一个密钥,为什么我不能只传入我的密钥的一个盐散列,即MD5散列 我相信这很简单,但我无法清楚地了解发生了什么。您不应该直接将密码传递到算法中。例如,使用将为您的密码添加盐的类。它可以用任何长度 请看一个例子 编辑:D'Oh-您的

我很难理解密码学中的密钥长度要求。我目前正在使用DES,我相信它是56位的。。。现在,通过将8个字符的密码转换为
字节[]
我的密码术就可以工作了。如果我使用7位密码,它不会

如果我错了,请原谅,这是因为ASCII字符是7位,所以8*7=56位吗

我觉得这不太对。如果我想使用一个密钥,为什么我不能只传入我的密钥的一个盐散列,即MD5散列


我相信这很简单,但我无法清楚地了解发生了什么。

您不应该直接将密码传递到算法中。例如,使用将为您的密码添加盐的类。它可以用任何长度

请看一个例子


编辑:D'Oh-您的问题不是C#或.Net标记的:

根据DES,密钥长度支持64位。

密钥必须具有64位大小,但密钥中仅使用56位。其他8位是奇偶校验位(内部使用)。


ASCII字符的大小为8位。

每个算法都设计为接受特定的密钥长度。密钥被用作算法的一部分,因此,它不能是你内心想要的任何东西

常见的键大小为:

  • DES:56位密钥
  • AES:128-256位密钥(常用值为128、192和256)
  • RSA(非对称加密):102420484096位密钥
一个数字,例如
1234567
只是一个4字节的变量。密钥应该是字节数组,例如
“1234567”
(在C中隐式转换为1)或`{1',2',3',4',5',6',7'}

如果希望将salt密钥的MD5散列传递给DES,那么应该使用一些密钥压缩技术。例如,您可以获取前7个字节(有些不希望),或者对MD5哈希执行DES加密(使用已知的常量密钥),并将除最后一个字节之外的所有字节作为DES操作的密钥


编辑:我在这里谈论的DES是根据NIST发布的标准实施的。可能是这样的(如上所述),您的特定API对密钥长度有不同的要求,并从中派生出最终的7字节密钥。

DES使用56位密钥:8字节,其中每个字节中的一位是奇偶校验位

但是,通常,建议使用公认的、众所周知的密钥派生算法将文本密码转换为对称密码密钥,而不考虑算法

PKCS#5()中描述的PBKDF2算法是一个广泛使用的密钥派生函数,可以生成任意长度的密钥。PBKDF2的核心是通过一个散列函数将salt和密码结合起来,以生成实际的密钥。该散列会重复多次,因此攻击者在其最常用密码的“字典”中尝试每个条目的代价高昂且速度缓慢

旧版本PBKDF1可以为DES加密生成密钥,但不建议将DES和PBKDF1用于新应用程序


大多数支持加密的平台在其API中包括PKCS#5密钥派生算法。

为了避免此问题并提高实现的整体安全性,通常我们会将密钥的一些散列变量传递给加密函数,而不是密钥本身

此外,最好使用一个特定于您正在执行的操作且不会更改的值(例如,内部用户ID)来“salt”散列。这可以确保对于密钥的任何两个实例,结果都是不同的


获得派生密钥后,可以根据特定加密函数的要求提取其前n位。

DES需要64位密钥。56位用于数据,8位用于奇偶校验。 每个字节在最后一个索引处包含一个奇偶校验位。此位用于检查可能发生的错误。 如果7个数据位的总和等于偶数,则正确的奇偶校验位为0,奇数为1

ASCII字符包含8位,如果不需要纠错,8个字符可用作密钥。如果需要EC,使用7个字符并在索引(基于0的)7,15,23,31,39,47,55,63处插入奇偶校验位

资料来源: 维基百科:

密钥表面上由64位组成;然而,算法实际上只使用其中的56位。8位仅用于检查奇偶校验,然后被丢弃。因此有效密钥长度为56位

“密钥名义上以8字节的形式存储或传输,每个字节具有奇数奇偶校验。根据ANSI X3.92-1981(现在称为ANSI INCITS 92-1981),第3.5节:


密钥的每个8位字节中的一位可用于密钥生成、分发和存储中的错误检测。位8、16、…、64用于确保每个字节具有奇偶校验。“

有些正确,有些错误。US-ASCII字符只有7位。但是,感谢您指出DES密钥的每个字节都包含一个奇偶校验位。感谢您指出,八个字节中的每个字节都有一个奇偶校验位(已丢弃?)。