【问题标题】:how to decrypt hashcode? is it the same with decode?如何解密哈希码?和解码一样吗?
【发布时间】:2013-05-30 00:04:45
【问题描述】:

如何解密哈希码?和解码一样吗?? 我怎样才能解密/解码这个代码?谁能帮帮我。

enter.setOnClickListener(new OnClickListener() 
    {
    @Override
    public void onClick(View v) 
    {
        // TODO Auto-generated method stub
        String a = txtID.getText().toString();
         int b = a.hashCode();
        txtCode.setText(b);
    }
    }

类似,它会反向读取代码并显示经过哈希和修剪的原始数据。

【问题讨论】:

  • hashCode 函数一般使用有损算法,所以这通常是做不到的。
  • 确实,不应该反转散列。您需要使用 crypt 函数,而不是哈希函数。
  • 哈希是单向函数。按照设计,它们不能颠倒。
  • 在上下文中,哈希码是一个 int 或 32 位。所以,即使可以反转,原来的值也不能包含超过32位的信息……

标签: java php javascript android string


【解决方案1】:

hashCode 方法来自 java.lang.Object 并且应该(必须?)遵循以下约定:

  • 每当在同一对象上多次调用它时 执行 Java 应用程序时,必须使用 hashCode 方法 一致地返回相同的整数,提供没有使用的信息 对象上的 equals 比较被修改。这个整数不需要 从应用程序的一次执行到另一次执行保持一致 执行相同的应用程序。
  • 如果两个对象根据equals(Object)方法相等,那么 对两个对象中的每一个调用 hashCode 方法必须产生 相同的整数结果。
  • 如果两个对象不相等,则不需要根据 equals(java.lang.Object) 方法,然后调用 hashCode 方法 这两个对象中的每一个都必须产生不同的整数结果。 然而,程序员应该意识到产生不同的 不相等对象的整数结果可以提高 哈希表。

我不确定您在这种情况下所说的“解密 hashCode”是什么意思,它可能不是您在这里寻找的功能/行为。

更多信息:http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html#hashCode()

【讨论】:

  • 您可以随意覆盖它(这样您就可以违反合同),但是您应该遵守该合同,否则事情会破裂。事实上,如果你的对象ever改变了它的hashCode,你仍然可能破坏HashMapHashSet之类的东西。
  • @ShadowCreeper 根据定义,不遵守约定的实现是一个错误。
  • @SJuan76 我倾向于同意你的看法。但也有人认为它在某些情况下可能有用(其中大部分被认为是丑陋的 hack)。
  • 如果您不遵循 hashCode 和其他方法(例如 equals)的约定,您将遇到有序集合的问题,最终可能会导致您的程序出现错误.你可以去那里看看:eclipsesource.com/blogs/2012/09/04/…
【解决方案2】:

您似乎误解了Object's .hashCode() 的含义。它绝不是给定对象的“加密安全”哈希。

它的唯一作用是遵守 .equals()/.hashCode() 合约。并且合约基本上有一个规则:如果两个对象实例被认为相等,那么它们的哈希码应该相等。就是这样。

这是一个完全合法的 hashCode() 实现:

@Override
public int hashCode() {
    return 42; //legal but useless
}

此函数最突出的用途是在Sets 中使用时。因此,这包括在Maps 中用作键。在这两种情况下,底层的使用都是哈希表。这就是为什么使用的哈希算法应该有一个不错的分布。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-09-10
    • 2015-12-18
    • 2013-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多