문제

누구든지 탄력 성을 사용하여 Java의 파일을 암호화하는 방법의 예를 보여 주거나 링크를 제공 할 수 있습니까? Bouncycastle.org를 살펴 보았지만 API에 대한 문서를 찾을 수 없습니다. 어떤 수업을 사용 해야하는지 아는 것만으로도 시작하는 데 큰 도움이 될 것입니다!

도움이 되었습니까?

해결책

어떤 유형의 암호화를 수행하고 싶습니까? 비밀번호 기반 (PBE), 대칭, 비대칭? 당신이 구성하는 방법의 전부 암호.

바운시 캐슬 특정 API, 제공하는 알고리즘 만 사용할 필요가 없습니다. 다음은 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 Doc을 볼 수 있습니다 http://bouncycastle.org/docs/docs1.6/index.html

이 페이지에서 예제를 다운로드 할 수 있습니다. http://eu.wiley.com/wileycda/wileytitle/productcd-0764596330,desccd-download.html

Bountycastle을 사용해야 할 특별한 이유가 없다면 몇 가지 코드 예제와 함께 Java 내장 암호화 지원에 대한 훌륭한 자습서 및 배경 정보를 찾을 수 있습니다. 여기.

탄력성 성 자바 코드를 찾기에 가장 좋은 곳은 탄력 성 테스트 스위트에서 테스트 사례를 거치는 것입니다.탄력 성 최신 릴리스 자바

이 테스트 스위트에는 비대화되지 않은 코드가 포함되어 있으며, 이는 쉽게 사용할 수 있습니다.

그것은 당신의 질문에 대한 간접적 인 대답이지만, 아마도 Jasypt를 사용하여 암호화를 처리하는 것이 유용하다는 것을 알게 될 것입니다.

다음은 jasypt를 사용하여 파일을 암호화하는 방법의 예입니다.http://www.jasypt.org/encrypting-configuration.html

그리고 다음은 Jasypt의 제공 업체로서 탄력성을 구성하는 방법입니다.http://www.jasypt.org/bouncy-castle.html

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top