【问题标题】:Does ready two-way hash function for strings with fixed hash length exist in Java?Java中是否存在用于具有固定哈希长度的字符串的就绪双向哈希函数?
【发布时间】:2018-11-11 09:12:00
【问题描述】:

我需要对字符串使用 hash 和 en-hashed(双向)函数。哈希应该是固定长度(5-6 个符号)。

例子:

String hashed = MagicHashLib.hash("long string"); //hash is hd45dk as an example
String enhashedLongString = MagicHashLib.enhash(hash);

Java 中是否存在已经实现的算法?还是我自己写?

【问题讨论】:

  • 什么是 enhash..?
  • 哈希应该是单向的。这产生了一个散列:) 所以,你可能不是在这里谈论散列,确实。
  • 你的意思是加解密吗?`
  • 与散列相反的操作。我还没有找到“散列”的正确反义词,抱歉
  • @Jun:一旦散列,就没有办法得到原始字符串了。这是一个单向函数。

标签: java algorithm hash hashtable


【解决方案1】:

您要查找的内容称为加密和解密

散列总是单向的。您无法从哈希值中恢复原始字符串。

关于散列和加密的区别的简要说明see this answer

【讨论】:

  • 您无法从哈希值中恢复原始字符串:不完全正确。只需要非常非常非常非常非常非常非常非常非常非常非常...非常非常长的时间
  • 添加了“可行”一词。
  • 我明白了。谢谢!
【解决方案2】:

无论编程语言如何,我都不认为这样的哈希存在。

这是hash function wikipedia page的引述:

A hash function is any function that can be used to map data of arbitrary size to data of fixed size.

这意味着您有一组固定的值,例如一个 6 字符长的散列可以存储 16^6 不同的值。但是,您可以创建任何字符串的哈希值。因此,哈希函数将可能无限不同的值映射到一组固定的值。因此会有碰撞。所以你不能仅仅通过哈希值来判断哪个是正确的原始值。

一个虚构的哈希函数的简单示例:John 映射到 abcJane 映射到 ghiDoe 也映射到 abc。所以当你看到abc 是一个哈希值时,它是从哪里来的?是John吗?是Doe吗?

【讨论】:

  • 感谢您的指出!更改为 16^6 因为这是哈希中的常用基数。但这无论如何都是基数的问题。您可以将其他字符包括为 &、#。但这会很奇怪:)
  • 我在这里有点困惑。你可能是对的:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-22
  • 1970-01-01
  • 2019-08-08
  • 1970-01-01
  • 2019-08-02
  • 2015-03-09
相关资源
最近更新 更多