2013-04-26 87 views
-3

我已加密使用上述代码的字符串。解密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; 
      } 

    } 

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

+0

一个想许多可能的输入,并希望正确的是其中之一。 – CodesInChaos 2013-04-26 08:26:46

+0

我已经回答了这个非常彻底[这里](http://stackoverflow.com/questions/18433917/decrypt-sha1-with-password-in-python?rq=1) – 2014-06-16 02:59:22

回答

6

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

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

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

在那里,规则可以是 http://docs.oracle.com/javase/6/docs/technotes/guides/security/StandardNames.html#Cipher

+0

使用AES-CBC或AES-CTR为加密除非你有充分的理由使用别的东西。 – rossum 2013-04-28 18:45:45