【问题标题】:SHA1 decryption of a string in Java [duplicate]Java中字符串的SHA1解密[重复]
【发布时间】:2013-02-15 12:12:46
【问题描述】:

我从这里How to SHA1 hash a string in Android? 找到了这段代码,它使用 SHA1 加密字符串,效果很好,

import java.io.UnsupportedEncodingException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

public class SHA1Encryption {

    public static String SHA1(String text) throws NoSuchAlgorithmException,
            UnsupportedEncodingException {
        MessageDigest md = MessageDigest.getInstance("SHA-1");
        md.update(text.getBytes("iso-8859-1"), 0, text.length());
        byte[] sha1hash = md.digest();
        return convertToHex(sha1hash);
    }

    private static String convertToHex(byte[] data) {
        StringBuilder buf = new StringBuilder();
        for (byte b : data) {
            int halfbyte = (b >>> 4) & 0x0F;
            int two_halfs = 0;
            do {
                buf.append((0 <= halfbyte) && (halfbyte <= 9) ? (char) ('0' + halfbyte)
                        : (char) ('a' + (halfbyte - 10)));
                halfbyte = b & 0x0F;
            } while (two_halfs++ < 1);
        }
        return buf.toString();
    }

}

但我需要将其解密回原始字符串。

谁能帮帮我?

【问题讨论】:

  • 猜猜输入。这是唯一的方法。 (顺便说一句。如果这是一个密码,那么你不应该使用 SHA-1,而应该使用 bcrypt、scrypt 或 PBKDF2)

标签: android encryption cryptography sha1


【解决方案1】:

您基本上要问的是:“给定一个值 y,找到一个 x,使得 h(x)=y。” 这称为寻找原像。 单向散列函数(其中 SHA1 是一个例子)的全部意义在于,这不可能以任何比蛮力更快的方式(平均需要 O(2^159) 次行动) .

进一步阅读: http://en.wikipedia.org/wiki/Cryptographic_hash_function http://en.wikipedia.org/wiki/One-way_compression_function

【讨论】:

    【解决方案2】:

    你不能这样做。 SHA1 是一种单向散列算法。无法取回原来的内容。

    如果您想要双向加密方案,请尝试使用 AES(或 RSA,但这可能有点过头了)。

    【讨论】:

      【解决方案3】:

      SHA1 是一个哈希函数,因此您无法解密,因为它没有解密。看一下密码散列函数的维基百科,它有一些关于散列函数和常见密码hash functions 的一般描述。

      【讨论】:

        【解决方案4】:

        您无法解密由安全单向哈希算法生成的值。散列不同于加密。

        您可以做的是遍历所有可能的字符串值,为每个字符串值创建一个哈希值,然后比较这些哈希值。如果您找到哈希值,您可以绝对确定您找到了原始字符串。您发现两个字符串的哈希值非常接近于零的可能性,您可以放心地假设它永远不会发生在加密安全哈希中。

        可能的字符串的数量显然是无穷无尽的,因此如果您对字符串有额外的了解,则只能遍历所有值。例如。如果您有 4 位 PIN 的哈希值,您可以使用该知识来计算多达 10.000 个可能的哈希值。

        【讨论】:

          猜你喜欢
          • 2011-12-05
          • 1970-01-01
          • 2013-04-20
          • 2018-09-06
          • 2022-01-25
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多