14

弾力のある城を使用してJavaでファイルを暗号化する方法の例を誰かに見せてもらえますか(またはリンクを提供できますか)?bouncycastle.orgを調べましたが、APIのドキュメントが見つかりません。どのクラスを使用するかを知っているだけでも、始めるのに大いに役立ちます。

4

5 に答える 5

20

どのタイプの暗号化を実行しますか?パスワードベース(PBE)、対称、非対称?そのすべては、暗号を構成する方法にあります。

BouncyCastle固有のAPIを使用する必要はなく、APIが提供するアルゴリズムのみを使用する必要があります。次に、BouncyCastlePBE暗号を使用して文字列を暗号化する例を示します。

import java.security.SecureRandom;
import java.security.Security;

import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.PBEKeySpec;

import org.bouncycastle.jce.provider.BouncyCastleProvider;

public class PBE {

    private static final String salt = "A long, but constant phrase that will be used each time as the salt.";
    private static final int iterations = 2000;
    private static final int keyLength = 256;
    private static final SecureRandom random = new SecureRandom();

    public static void main(String [] args) throws Exception {
        Security.insertProviderAt(new BouncyCastleProvider(), 1);

        String passphrase = "The quick brown fox jumped over the lazy brown dog";
        String plaintext = "hello world";
        byte [] ciphertext = encrypt(passphrase, plaintext);
        String recoveredPlaintext = decrypt(passphrase, ciphertext);

        System.out.println(recoveredPlaintext);
    }

    private static byte [] encrypt(String passphrase, String plaintext) throws Exception {
        SecretKey key = generateKey(passphrase);

        Cipher cipher = Cipher.getInstance("AES/CTR/NOPADDING");
        cipher.init(Cipher.ENCRYPT_MODE, key, generateIV(cipher), random);
        return cipher.doFinal(plaintext.getBytes());
    }

    private static String decrypt(String passphrase, byte [] ciphertext) throws Exception {
        SecretKey key = generateKey(passphrase);

        Cipher cipher = Cipher.getInstance("AES/CTR/NOPADDING");
        cipher.init(Cipher.DECRYPT_MODE, key, generateIV(cipher), random);
        return new String(cipher.doFinal(ciphertext));
    }

    private static SecretKey generateKey(String passphrase) throws Exception {
        PBEKeySpec keySpec = new PBEKeySpec(passphrase.toCharArray(), salt.getBytes(), iterations, keyLength);
        SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("PBEWITHSHA256AND256BITAES-CBC-BC");
        return keyFactory.generateSecret(keySpec);
    }

    private static IvParameterSpec generateIV(Cipher cipher) throws Exception {
        byte [] ivBytes = new byte[cipher.getBlockSize()];
        random.nextBytes(ivBytes);
        return new IvParameterSpec(ivBytes);
    }

}
于 2010-01-12T20:47:58.657 に答える
3

http://bouncycastle.org/docs/docs1.6/index.htmlで Java ドキュメントを表示できます。

このページから例をダウンロードできます: http://eu.wiley.com/WileyCDA/WileyTitle/productCd-0764596330,descCd-DOWNLOAD.html

于 2010-01-12T20:49:00.977 に答える
2

BouncyCastle を使用する特別な理由がない場合は、Java 組み込みの暗号化サポートに関する優れたチュートリアルと背景情報を、いくつかのコード例とともにここで見つけることができます。

于 2010-01-12T20:54:44.493 に答える
1

Bouncy Castle の Java コード例を見つけるのに最適な場所は、Bouncy Castle のテスト スイートのテスト ケースを参照することです 。Bouncy Castle の最新リリースの Java

これらのテスト スイートには、すぐに使用できる非推奨のコードが含まれています。

于 2012-07-25T04:17:22.680 に答える
0

これはあなたの質問に対する間接的な回答ですが、おそらく jasypt を使用して暗号化を処理すると便利です。

jasypt を使用してファイルを暗号化する方法の例を次に示します: http://www.jasypt.org/encrypting-configuration.html

また、弾む城を jasypt のプロバイダーとして設定する方法は次のとおりです: http://www.jasypt.org/bouncy-castle.html

于 2010-01-12T20:48:38.043 に答える