Пример шифрования xml-файла на Java с помощью bouncy castle

может ли кто-нибудь показать мне (или предоставить ссылку) пример того, как зашифровать файл на Java с помощью bouncy castle? Я посмотрел по bouncycastle.org но не могу найти любую документацию их API. Даже просто знать, какие классы использовать, было бы большой помощью для меня, чтобы начать!

5 ответов


какой тип шифрования вы хотите выполнить? Пароль на основе (PBE), симметричный, асимметричный? Все настройки шифр.

вам не нужно использовать какие-либо API BouncyCastle, только алгоритмы, которые он предоставляет. Вот пример, который использует шифр BouncyCastle PBE для шифрования строки:

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);
    }

}

вы можете просмотреть документ java в http://bouncycastle.org/docs/docs1.6/index.html

вы можете скачать примеры с этой страницы: http://eu.wiley.com/WileyCDA/WileyTitle/productCd-0764596330,descCd-DOWNLOAD.html


Если у вас нет какой-либо конкретной причины для использования BountyCastle, вы можете найти хороший учебник и справочную информацию о встроенной поддержке криптографии Java с несколькими примерами кода здесь.


лучшее место для поиска примеров кода java Bouncy Castle-это пройти тестовые случаи в тестовом наборе bouncy castle надувной замок последней версии java

эти наборы тестов содержат не устаревший код, который можно легко использовать


хотя это косвенный ответ на ваш вопрос, возможно, Вам будет полезно использовать jasypt для обработки шифрования.

вот пример того, как зашифровать файл с помощью jasypt: http://www.jasypt.org/encrypting-configuration.html

а вот как настроить надувной замок в качестве поставщика для jasypt: http://www.jasypt.org/bouncy-castle.html