将字符串散列为动态字符数的算法

标签 algorithm dynamic hash encoding variable-length

我正在寻找一种将字符串散列为动态字符数的方法。我不想修剪现有的散列(例如 SHA),而是生成一个散列,您可以为其指定输出字符数。如果输入少于字符数,它也应该工作。它不需要是加密的,它只需要保证相同输入的相同散列。我一直在 wiki 上浏览哈希函数,但它们似乎都具有固定长度或动态长度,具体取决于输入。

最佳答案

您要找的可能是Extendable Output Functions (XOF's) !

这些散列函数没有预定义的输出长度,可能会使用 sponge functions用于 build 。

SHA-3 系列由四个加密哈希函数 [...] 和两个可扩展输出函数 (XOF) 组成,称为 SHAKE128 SHAKE256 .

您可以在 https://emn178.github.io/online-tools/ 下尝试两者.对于输出位,选择您想要的数字或字符。

对于 Java 实现,请参阅 Bouncy Castle Crypto Library支持两种算法 https://www.bouncycastle.org/specifications.html

但要注意collisions如果哈希长度太小。

关于将字符串散列为动态字符数的算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55117636/

相关文章:

hashtable - 分析目标并选择良好的哈希函数

algorithm - 为什么贪心算法是启发式的,而不是元启发式的?

java - 如何按升序对段数组 (int left, int right) 进行排序,但如果 left(i)=left(i+1) 则根据 right(i) 和 right(i+1) 对其进行排序

algorithm - Fleury 算法的时间复杂度

给定偏移量移动 Sprite 的算法

ruby - 动态定义模块

php - php中的动态类属性$$value

file - 如果文件长度相同,哈希冲突的可能性有多大?

iphone - 你应该如何在 iPhone 上创建(和使用)静态库

java - Android HMAC显示意外错误