【问题标题】:Encoding user Input to get an encryption key编码用户输入以获取加密密钥
【发布时间】:2021-02-26 14:45:39
【问题描述】:

我正在接受用户输入并需要将其转换为 AES 加密密钥。 我有:

keyInput= input("Enter key:")
key = keyInput.encode()
print(key)

如果我输入“计算机”作为输入。我得到了输出的结果b'computer'

不应该看起来更像这样吗?

b'\xbf\xc0\x85)\x10nc\x94\x02)j\xdf\xcb\xc4\x94\x9d(\x9e[EX\xc8\xd5\xbfI{\xa2$\x05(\xd5\x18'

【问题讨论】:

  • 散列和加密是不同的东西。前者应该用于密码存储和验证(有更具体的要求);后者不应该
  • 我已经编辑了这篇文章,希望得到一些意见。提前致谢
  • 请阅读How to Ask,然后阅读edit 您的问题以提供足够的上下文。理想情况下,您应该给我们一个minimal reproducible example
  • 对不起,堆栈很新。

标签: python encryption hash cryptography aes


【解决方案1】:

"computer" 不能是 AES 密钥,因为它只包含 ASCII 字符。 AES 等算法的密钥应该由完全随机的位组成,当然还有特定大小(128、192 或 256 位)。

您所追求的是基于密码的加密。为此,有一些标准,例如PKCS#5,字面意思是“基于密码的加密规范”(2.1 版)。基本上,它使用 PBKDF2 从相对较弱的密码中计算密钥,使用盐和工作因子(或者,对于 PBKDF2,迭代计数)。

【讨论】:

    【解决方案2】:

    长答案:https://crypto.stackexchange.com/questions/53552/aes-with-small-and-large-string-keys

    简短的回答。 AES 采用 128 位、192 位或 256 位密钥。有些 API 允许您使用 密码 而不是 key。密码如何转换为适当长度的密钥不是 AES 标准的一部分。有大量“基于密码的密钥派生函数”(PBKDF) 执行此功能。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-05-11
      • 1970-01-01
      • 2015-03-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-09
      相关资源
      最近更新 更多