2014-02-27 128 views
3

如何使用jasypt解密加密的密碼。加密解密使用jasypt

package com.uk.mysqlmaven.jsf.test; 

import org.jasypt.util.password.StrongPasswordEncryptor; 
import org.jasypt.util.text.StrongTextEncryptor; 


public class PasswordEncryptionDecryptionUsingJASYPT { 
    public static void main(String[] args) { 
     try { 
      String password = "password"; 
      StrongPasswordEncryptor encryptor = new StrongPasswordEncryptor(); 
      String encryptedPassword = encryptor.encryptPassword(password); 
      if (encryptor.checkPassword(password, encryptedPassword)) { 
       //correct 
       System.out.println("Encrypted: "+ encryptedPassword); 
      } else { 
       //bad again 
       System.out.println("Error: "); 
      } 
      StrongTextEncryptor textEncryptor = new StrongTextEncryptor(); 
      textEncryptor.setPassword(encryptedPassword); 
      String decryptedPassword = textEncryptor.decrypt(encryptedPassword); 
      System.out.println("Decrypted: "+ decryptedPassword); 

     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 
} 

使用jasypt解密密碼時,控制檯中顯示錯誤。

Encrypted: JIOYXNa1+3+QefY2S7sas7LmhyOuDQcG8TTsQoTkqj0OtobCvwAFHXxoTr7z6HuP 
org.jasypt.exceptions.EncryptionOperationNotPossibleException: Encryption raised an exception. A possible cause is you are using strong encryption algorithms and you have not installed the Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files in this Java Virtual Machine 
    at org.jasypt.encryption.pbe.StandardPBEByteEncryptor.handleInvalidKeyException(StandardPBEByteEncryptor.java:999) 
    at org.jasypt.encryption.pbe.StandardPBEByteEncryptor.decrypt(StandardPBEByteEncryptor.java:976) 
    at org.jasypt.encryption.pbe.StandardPBEStringEncryptor.decrypt(StandardPBEStringEncryptor.java:725) 
    at org.jasypt.util.text.StrongTextEncryptor.decrypt(StrongTextEncryptor.java:118) 
    at com.uk.mysqlmaven.jsf.test.PasswordEncryptionDecryptionUsingJASYPT.main(PasswordEncryptionDecryptionUsingJASYPT.java:22) 
+0

@sᴜʀᴇsʜᴀᴛᴛᴀ我們可以解密加密的密碼嗎? – pudaykiran

+0

是的,爲什麼不。畢竟,它也是一個簡單的字符串。如果它散列,你不能得到它。 –

+0

讓我們[在聊天中繼續討論](http://chat.stackoverflow.com/rooms/48574/discussion-between-ss--and-udaykiran-pulipati) –

回答

3

你可以試試下面的例子。這將爲你工作:請始終保持mpCryptoPassword值非常祕密的位置,只有應用程序應該能夠讀取。

public class EncryptionDecryptionUsingJASYPT { 

    private static String mpCryptoPassword = "BornToFight"; 

    public static void main(String[] args) { 
     String value = "Original Text: Eclipse"; 

     System.out.println("Original Value : "+value); 
     StandardPBEStringEncryptor encryptor = new StandardPBEStringEncryptor(); 
     encryptor.setPassword(mpCryptoPassword); 
     String encryptedPassword = encryptor.encrypt(value); 
     System.out.println(encryptedPassword); 

     StandardPBEStringEncryptor decryptor = new StandardPBEStringEncryptor(); 
     decryptor.setPassword(mpCryptoPassword); 
     System.out.println(decryptor.decrypt(encryptedPassword)); 
    } 
}