2013-04-26 86 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