32

暗号化には Jasypt を使用しています。これは私のコードです:

public class Encryptor {    
    private final static StandardPBEStringEncryptor pbeEncryptor = new StandardPBEStringEncryptor();
    private final static String PASSWORD = "FBL";
    private final static String ALGORITHM = "PBEWithMD5AndTripleDES";

    static{
        pbeEncryptor.setPassword( PASSWORD );
        //pbeEncryptor.setAlgorithm( ALGORITHM );       
    }

    public static String getEncryptedValue( String text ){
        return pbeEncryptor.encrypt( text );
    }

    public static String getDecryptedValue( String text ){
        return pbeEncryptor.decrypt( text );
    }

}

行のコメントを外すsetAlgorithmと、例外がスローされます

org.jasypt.exceptions.EncryptionOperationNotPossibleException : 暗号化で例外が発生しました。考えられる原因は、強力な暗号化アルゴリズムを使用しており、この Java 仮想マシンに Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files をインストールしていないことです。

アピ 言います:

暗号化に使用するアルゴリズムを設定します PBEWithMD5AndDES のように、暗号化に使用するアルゴリズムを設定します。

このアルゴリズムは、JCE プロバイダー (指定する場合は、または指定しない場合はデフォルトの JVM プロバイダー) によってサポートされている必要があり、サポートされている場合は、ALGORITHM/MODE/PADDING のようにモードとパディングを指定することもできます。 .

参照: http://www.jasypt.org/api/jasypt/apidocs/org/jasypt/encryption/pbe/StandardPBEStringEncryptor.html#setAlgorithm%28java.lang.String%29

ここで、「setAlgorithm」にコメントすると、デフォルトのアルゴリズム [md5 だと思います] が使用され、正常に動作します。これは、私の JVM が md5 をサポートしていることを意味します。次に、私の JVM でサポートされている他の暗号化アルゴリズムを調べる方法を説明します。

ありがとう、

4

6 に答える 6

43

以下に、すべてのプロバイダーとアルゴリズムのサポーターをリストします。Java のどのバージョンを使用していますか? 古いバージョンを使用していない限り、JCE は標準で含まれている必要があります。

import java.security.Provider;
import java.security.Security;

public class SecurityListings {
    public static void main(String[] args) {
        for (Provider provider : Security.getProviders()) {
            System.out.println("Provider: " + provider.getName());
            for (Provider.Service service : provider.getServices()) {
                System.out.println("  Algorithm: " + service.getAlgorithm());
            }
        }

    }
}

編集: javax.crypto パッケージの標準的なものを使用しない理由はありますか?

1) Keyusing を生成する

Key key = SecretKeyFactory.getInstance(algorithm).generateSecret(new PBEKeySpec(password.toCharArray()));

2)Cipherを使用して作成します

cipher = Cipher.getInstance(algorithm);  

3) キーで暗号化を開始します

cipher.init(Cipher.ENCRYPT_MODE, key);  

4) で暗号化を行う

byte[] encrypted = cipher.doFinal(data)
于 2010-09-10T10:36:48.957 に答える
4

Jasypt コマンド ライン ツールにはlistAlgorithms.bat、Windows およびlistAlgorithms.shLinux 用と呼ばれる、これを行うためのスクリプトが付属しています。

ダウンロードして使用する方法については、http ://www.jasypt.org/cli.html#Listing_algorithms を参照してください。

于 2014-05-20T19:27:22.960 に答える
3

まだインストールしていない場合は、アルゴリズムのサポートを提供する JCE (Java Cryptography Extension) をインストールする必要があります。

ここでインストール方法を見ることができます:

http://download.oracle.com/javase/1.4.2/docs/guide/security/CryptoSpec.html#ProviderInstalling

ライブラリは次の場所にあります: http://www.oracle.com/technetwork/java/javase/tech/index-jsp-136007.html

于 2010-09-10T09:26:25.587 に答える
2

@Qwerky が投稿したコードを試しましたが、あまり役に立ちません。最新の BouncyCastle プロバイダーを追加しましたが、得られた結果は非常にわかりにくいものでした。これにより、プロバイダー、バージョン、およびアルゴリズムの種類と名前がより詳細に表示されます。

for (Provider provider : Security.getProviders()) {
    System.out.println("Provider: " + provider.getName() + " version: " + provider.getVersion());
    for (Provider.Service service : provider.getServices()) {
        System.out.printf("  Type : %-30s  Algorithm: %-30s\n", service.getType(), service.getAlgorithm());
    }
}
于 2014-07-27T10:05:06.877 に答える
1

Qwerkyからの「保留中」の質問がまだあります:javax.cryptoを使用する代わりにJasyptを使用するのはなぜですか?

初心者には暗号化する簡単な方法であり、経験豊富なユーザーには高度に構成可能であるため、Jasyptを使用することをお勧めします。

Jasyptを使用すると、JCEと暗号化について少し知識があれば、javax.cryptoをすぐに利用できるようになります。ユーザーパスワードを管理する場合でも、データを暗号化/復号化する場合でも、フレームワークは質問に対する単純な抽象化を提供します。

同時に、フレームワークはJCE仕様のすべての可能性を公開し、経験豊富なユーザーが完全に制御できるようにします。

これに加えて、Jasyptは、よく知られている質問(データベースに保存されている機密データの処理など)に対して、すぐに使用できる多くの機能を提供します。

于 2012-01-24T11:50:14.707 に答える