解密SHA加密字符串

时间:2013-04-26 08:09:44

标签: java encryption sha

我使用上面的代码加密了一个字符串。

public String encrypt(String generatedKey)
    {
            try {
                MessageDigest md = MessageDigest.getInstance("SHA");
                md.update(generatedKey.getBytes("UTF-8"));
                byte digest[] = md.digest();
                return (new BASE64Encoder()).encode(digest);
            }
            catch (Exception e) {
                return null;
            }

    }

同样,我需要一个代码来解密上面生成的代码。我怎么能这样做?

3 个答案:

答案 0 :(得分:6)

SHA是摘要算法,而不是加密算法。摘要值不可解密。这就是他们安全的原因。两个不同的输入可以给出相同的摘要值。但这种可能性很小。对于sha256,它是1 /(2 ^ 256)。

摘要算法的输出具有恒定长度。对于SHA256,无论输入长度是1位还是100 Gbs,它始终为256位。如果我们可以解密256位摘要值并返回原始1Gb输入,我们将永远不需要压缩算法:)

答案 1 :(得分:2)

消息摘要产生一个小的指纹"一组更大的数据。这是一种单向程序。

您可能正在寻找的是加密。

Key key = new SecretKeySpec(secret.getBytes(), ALGORITHM);

// Encrypt
Cipher cipher = Cipher.getInstance(ALGORITHM);
cipher.init(Cipher.ENCRYPT_MODE, key);
byte[] encryptedData = cipher.doFinal(plainText);

// Decrypt
cipher.init(Cipher.DECRYPT_MODE, key)
byte[] decryptedData = cipher.doFinal(encryptedData);

ALGORITHM可以是其中之一 http://docs.oracle.com/javase/6/docs/technotes/guides/security/StandardNames.html#Cipher

答案 2 :(得分:0)

我很确定我们无法直接解码SHA加密字符串。

请参阅此内容以获得清晰的解释:How to decrypt SHA-256 encrypted String?