security - 我应该如何创建我的 DES key ?为什么 7 个字符的字符串不够用?

标签 security encryption cryptography key des

我在理解密码学中的 key 长度要求时遇到了一些困难。我目前正在使用 DES,我认为它是 56 位...现在,通过将 8 个字符的密码转换为 byte[]我的密码学有效。如果我使用 7 位密码,则不会。

现在,如果我错了,请原谅我,但这是因为 ASCII 字符是 7 位,因此 8 * 7 = 56 位吗?

这对我来说似乎不正确。如果我想使用 key ,为什么我不能只传递我的 key 的加盐哈希,即 MD5 哈希?

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

最佳答案

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

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

PKCS #5 ( RFC 2898 ) 中描述的 PBKDF2 算法是一种广泛使用的 key 派生函数,可以生成任意长度的 key 。 PBKDF2 的核心是通过哈希函数将盐和密码结合起来,以生成实际的 key 。散列被重复多次,因此攻击者尝试在她的最常见密码“字典”中的每个条目既昂贵又缓慢。

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

大多数具有加密支持的平台在其 API 中都包含 PKCS #5 key 派生算法。

关于security - 我应该如何创建我的 DES key ?为什么 7 个字符的字符串不够用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/965500/

相关文章:

java - JDK 8 在 KeyStore.load 中使用 SHA 哈希算法安全吗?

security - 如何防止外部用户查看文档文件

.net - 打开文件 - 安全警告

asp.net - 使用与 Web 服务器分开的 SQL 来提高数据安全性(Windows 2003/SQL 2008)?

c# - 如何在 C# 中获取给定文件夹的组和用户名列表

PHP:简单,验证字符串是否为十六进制?

video - 是否可以通过加密特定帧来加密整个视频?

ssl - 如何为 Go 服务器设置 TLS 密码?

c - 在 c 中预先计算 AES256 加密的 "buffer"的大小

java - JCE中是否有任何机制来指定 key 生成生命周期( session key 或永久 key )