Java暗号化Jasypt(オープンソースキット)

6008 ワード

JasyptすなわちJava Simplified EncryptionはSourceforgeである.Net上のオープンソースプロジェクトです.
  • Jasyptプロジェクトアドレス:http://www.jasypt.org/
  • ダウンロードアドレス(SourceForge.net):https://sourceforge.net/projects/jasypt/files/

  • Jasyptは、パスワードDigest認証、テキストとオブジェクトの暗号化、hibernateの統合、Spring Security(Acegi)を含むプロジェクトの暗号化機能を追加する簡単な方法を開発者に提供し、パスワード管理を強化します.Jasypt開発チームは、Spring Framework、Hibernate、Acegi Securityと統合できるJava暗号化ツールJasypt 1.4を発表しました.
    Jasypt 1.4の新しい特徴は、暗号化プロパティファイル(encryptable properties files)、Spring Framework統合、暗号化Hibernateデータソース構成、新しいコマンドラインツール、URL暗号化Apache wicket統合、およびドキュメントのアップグレードです.
    Jasypt文書による、暗号化、機密情報、データ通信、完全な検査データを作成するsumsなどのタスクとアプリケーションの暗号化に用いることができる.その他のパフォーマンスには、高セキュリティ、標準ベースの暗号化テクノロジー、一方向および双方向に暗号化可能な暗号化パスワード、テキスト、デジタルおよびバイナリファイルが含まれます.Jasyptは、Acegi Security、すなわちSpring Securityと統合することもできる.Jasyptは暗号化アプリケーション構成の統合機能も持ち、Java Cryptography ExtensionがJasyptを使用できるようにオープンなAPIを提供しています.
    Jasyptはまた、RSA規格に準拠したパスワードベースの暗号化を行い、構成されていない暗号化ツールと、新しい高構成可能な規格の暗号化ツールを提供しています.
    一、簡単な例
    import org.jasypt.util.text.BasicTextEncryptor;
    import org.jasypt.util.text.StrongTextEncryptor;
    
    public class EncypterTest {
    
    	public static void main(String[] args) {
    		//   
    		BasicTextEncryptor textEncryptor = new BasicTextEncryptor();
    		textEncryptor.setPassword("password");
    		String newPassword = textEncryptor.encrypt("123456");
    		System.out.println(newPassword);
    		//   
    		BasicTextEncryptor textEncryptor2 = new BasicTextEncryptor();
    		textEncryptor2.setPassword("password");
    		String oldPassword = textEncryptor2.decrypt(newPassword);
    		System.out.println(oldPassword);
    		System.out.println("--------------------------");
    		/**
    		 * Utility class for easily performing high-strength encryption of
    		 * texts. This class internally holds a StandardPBEStringEncryptor
    		 * configured this way: Algorithm: PBEWithMD5AndTripleDES. Key obtention
    		 * iterations: 1000. The required steps to use it are: Create an
    		 * instance (using new). Set a password (using setPassword(String)).
    		 * Perform the desired encrypt(String) or decrypt(String) operations. To
    		 * use this class, you may need to download and install the Java
    		 * Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy
    		 * Files. This class is thread-safe.
    		 */
    		StrongTextEncryptor ste = new StrongTextEncryptor();
    		//   
    		ste.setPassword("password");
    		String encyptedResult = ste.encrypt("123456");
    		System.out.println("encyptedResult:" + encyptedResult);
    		//   
    		String dencyptedResult = ste.decrypt(encyptedResult);
    		System.out.println(dencyptedResult);
    	}
    }
    /*
       BasicTextEncryptor   ,      StrongTextEncryptor  ,    jce
    Java            :        JCA(Java Cryptography Architecture )       JCE(Java Cryptography Extension)。
               jce    。
    */
    

    二、jce(Java Cryptography Extension)
    Javaにおける復号化機能に関するAPIは,米国の暗号化輸出条例により輸出が制限されているため,Javaにおけるセキュリティコンポーネントは暗号化機能を含まないJCA(Java Cryptography Architecture)と暗号化機能を含むJCE(Java Cryptography Extension)の2つの部分に分かれている.jceについては「javaのjce」を参照してください.
    jrelibsecurityディレクトリの下のlocal_policy.JArとUS_export_policy.JArという2つのファイルは重要な役割を果たしています.
    通常、私たちがダウンロードしたjdkがインストールされた後、この2つのファイルは2.4 k程度で、実際にJCEの制限がないのは5 k程度であるべきです.
    jceのインストール:
    まず、対応するjceバージョンをダウンロードします.
  • JDK 8対応バージョンダウンロードリンク:http://www.oracle.com/technetwork/java/javase/downloads/jce8-download-2133166.html
  • JDK 7対応バージョンダウンロードリンク:http://www.oracle.com/technetwork/java/javase/downloads/jce-7-download-432124.html
  • JDK初期バージョンのダウンロードリンク:http://www.oracle.com/technetwork/java/javasebusiness/downloads/java-archive-downloads-java-plat-419418.html#jce_policy-1.5.0-oth-JPR

  • 対応するバージョンのjceをダウンロードした後、ローカルのjdkをバックアップし(問題が発生しないように)、local_を置き換えました.policy.JArとUS_export_policy.jar.実は私がダウンロードしたのはかえって元のより小さいですが、交換して正常に使うことができます.
    三、例二
    //  
    import org.jasypt.encryption.pbe.StandardPBEStringEncryptor;
    import org.jasypt.encryption.pbe.config.EnvironmentStringPBEConfig;
    
    /**
     *                :
     * ENC(  )
     * @author    
     */
    public class ConfigEncryptUtils {
        public static void main(String[] args){
            //    
            StandardPBEStringEncryptor encryptor = new StandardPBEStringEncryptor();
            //    
            EnvironmentStringPBEConfig config = new EnvironmentStringPBEConfig();
            config.setAlgorithm("PBEWithMD5AndDES");
            //            
            config.setPassword("apdplat");
            //    
            encryptor.setConfig(config);
            String plaintext="root";
            //  
            String ciphertext=encryptor.encrypt(plaintext);
            System.out.println(plaintext + " : " + ciphertext);
        }
    }

    運転出力結果は以下の通りである:root:azL 9 Cyp 9 H 62 r 3 eUgZ+TESw==
    注意:実行するたびに発生する暗号化結果はまったく異なりますが、復号化は同じです.
     
    //  
    import org.jasypt.encryption.pbe.StandardPBEStringEncryptor;
    import org.jasypt.encryption.pbe.config.EnvironmentStringPBEConfig;
    
    /**
     *                :
     * ENC(  )
     * @author    
     */
    public class ConfigEncryptUtils {
        public static void main(String[] args){
            //    
            StandardPBEStringEncryptor encryptor = new StandardPBEStringEncryptor();
            //    
            EnvironmentStringPBEConfig config = new EnvironmentStringPBEConfig();
            config.setAlgorithm("PBEWithMD5AndDES");
            //            
            config.setPassword("apdplat");
            //    
            encryptor.setConfig(config);
            String ciphertext="azL9Cyp9H62r3eUgZ+TESw==";
            //  
            String plaintext=encryptor.decrypt(ciphertext);
            System.out.println(ciphertext + " : " + plaintext);
        }
    }

    実行出力結果は、azL 9 Cyp 9 H 62 r 3 eUgZ+TESw=:root上から、暗号化と復号化のコードの唯一の違いはencryptとdecryptであることがわかります.
    四、JasyptとSpringの統合
     
    参考資料:
  • アプリケーションでJasyptを使用してデータベースのユーザー名とパスワードを保護する方法
  • Javaセキュリティ–JCE
  • 赞赏