Пример шифрования XML-файла в Java с помощью бодрого замка

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

12
задан Lee Warner 12 January 2010 в 20:43
поделиться

4 ответа

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

Вам не нужно использовать какие-либо специфические API на BouncycaCtle, просто алгоритмы, которые он обеспечивает. Вот пример, который использует Bouncyctlecle 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);
    }

}
20
ответ дан 2 December 2019 в 06:08
поделиться

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

1
ответ дан 2 December 2019 в 06:08
поделиться

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

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

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

0
ответ дан 2 December 2019 в 06:08
поделиться

Вы можете просмотреть Java DOC в http://bouncyctle.org/docs/docs1.6/index.html

Вы можете скачать примеры с этой страницы: http://eu.wiley.com/wileycda/wileytitle/productcd-0764596330,764596330,desccd-download.html

3
ответ дан 2 December 2019 в 06:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: