【问题标题】:Hashing a string to a specific length将字符串散列到特定长度
【发布时间】:2017-12-26 13:06:49
【问题描述】:

我的任务是将字符串加密到一定长度。 理想情况下......该函数应该作为参数......

  1. 要加密的可变大小字符串
  2. 生成的加密字符串的长度

不需要解密。我一直在查看 SHA384,但我无法理解在线示例,以至于无法对其进行修改以使其散列到指定长度。

【问题讨论】:

  • SHA 总是输出一个固定长度的哈希值。如果您想要更长的时间,请在其中附加随机字节并在需要比较时将其删除。
  • 你实际上如何减少它。散列后的字符串总是比请求的长度长得多。
  • 以@AlexK 为基础。说,散列通常具有固定长度的输出,因此您不能只选择不同的长度。但是,您可以执行与 git 类似的操作,将整个哈希存储在其中,但仅显示前七个字符,或者根据您的需要显示不同的数字。来源:stackoverflow.com/questions/18134627/…

标签: encryption hash cryptography sha2


【解决方案1】:

你不能请求长度,这是方法的一部分。

如果您想要更短的输出,只需删除额外的字节,每个字节(和位)都是单独随机的,删除哪些字节没有区别。


散列不是加密,它是一种单向不可逆函数,它接受可变数量的输入并生成固定数量的输出。

您需要对哈希进行加密吗?

【讨论】:

    【解决方案2】:

    你没有说你是否想要一个加密安全的散列。加密哈希:SHA-1、SHA-2、SHA-3 和其他具有固定范围的输出大小,通常相对有限。

    非加密哈希通常具有更广泛的可用大小。对于非加密哈希,我通常建议使用 FNV hash,它易于实现并提供广泛的输出大小:32 位到 1024 位。

    【讨论】:

    • 说加密哈希的输出大小有限是误导性的。 SHA-3 算法 (Keccak) 有一个密切相关的表亲 SHAKE,它是一个可扩展的输出,允许您选择任意大小。
    • 我说的是“通常比较有限”。正如您所指出的,有一些例外情况。
    【解决方案3】:

    哈希是一种单向函数,意味着它不能被反转。如果要生成许可证密钥(例如),您可以简单地对散列字符串进行子串化。

    【讨论】:

      猜你喜欢
      • 2010-09-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-24
      相关资源
      最近更新 更多