【问题标题】:Is not a good idea to use hash values directly for encryption?直接使用哈希值进行加密不是一个好主意吗?
【发布时间】:2018-02-23 11:47:26
【问题描述】:

比如sha-256生成的hash值,像这样直接用于特定的字节数组。

void Run(CryptoArray& plain, CryptoArray& key)
{
  uint8_t *hash = Sha256::FromArray(key.getArray(), key.getSize());
  size_t round = plain.getSize() / 8;
  size_t remain = plain.getSize() % 8;
  for (size_t i = 0; i < round; i++)
    ((uint64_t *)plain.getArray())[i] ^= ((uint64_t *)hash)[i % 8];

  uint8_t *arr = plain.getArray() + round * 8;
  for (size_t i = 0; i < remain; i++)
    arr[i] ^= hash[i];
}

如果在遥远的将来发明(或使用大整数)2^2048位计算机,这个问题是并行化的,很容易解决。但是,我知道这个 simple-hash-crpyto 函数和常见的加密函数都旨在使密码难以充分利用。

如果是这样,开发人员是否添加了一些附加功能以增加使用这些功能(AES、DES、...)获取密码所需的时间?如果没有,单独使用散列函数是否存在致命问题?我看到的所有程序都没有像这样使用哈希函数。

【问题讨论】:

  • 基本上,你有一个stream cipher,它带有一个非常非常非随机的密钥流。
  • 您还有缓冲区溢出。您将hash 视为一个包含 8 个 64 位值的数组——即 512 位,而 Sha-256 产生 256 位(因此得名)。
  • 我不明白你在问什么?散列和加密是两种根本不同的编码数据形式。它们有不同的行为和不同的用途。无论哪种方式,您的问题都与任何特定语言无关,无论您是否包含 C++ 代码。
  • 抱歉,我编辑了我的问题。
  • 您知道有专门的securitycrypto 姐妹网站,对吧?这绝不是一个编程问题。

标签: encryption hash


【解决方案1】:

我认为阅读Hashes and Encryption 算法之间的差异会有所帮助。

【讨论】:

  • 真正的评论,而不是答案。
猜你喜欢
  • 2010-12-03
  • 2019-07-19
  • 2017-10-05
  • 1970-01-01
  • 1970-01-01
  • 2012-12-01
  • 2015-07-25
  • 2019-02-19
  • 1970-01-01
相关资源
最近更新 更多