我使用上面的代码加密了一个字符串。
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;
}
}
同样,我需要一个代码来解密上面生成的代码。我怎么能这样做?
答案 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?