Пример шифрования XML-файла в Java с использованием надувного замка - PullRequest
12 голосов
/ 12 января 2010

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

Ответы [ 5 ]

20 голосов
/ 12 января 2010

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

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

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

}
3 голосов
/ 12 января 2010

Вы можете просмотреть документацию по Java на http://bouncycastle.org/docs/docs1.6/index.html

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

1 голос
/ 25 июля 2012

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

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

1 голос
/ 12 января 2010

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

0 голосов
/ 12 января 2010

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

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

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

...