-2

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

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;
            }

    }

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

4

3 回答 3

5

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

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

于 2013-04-26T08:16:50.737 回答
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之一

于 2013-04-26T08:17:16.810 回答
0

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

请参阅此以获得明确的解释:如何解密 SHA-256 加密字符串?

于 2013-04-26T08:14:13.933 回答