Có ai cho tôi thấy (hoặc cung cấp liên kết đến) một ví dụ về cách mã hóa tệp trong Java bằng cách sử dụng lâu đài bouncy không? Tôi đã xem qua bouncycastle.org nhưng không thể tìm thấy bất kỳ tài liệu nào về API của họ. Thậm chí chỉ cần biết lớp nào sẽ sử dụng sẽ là một trợ giúp lớn cho tôi để bắt đầu!Ví dụ về mã hóa một tệp xml trong Java bằng cách sử dụng lâu đài bouncy
Trả lời
Bạn muốn thực hiện loại mã hóa nào? Dựa trên mật khẩu (PBE), đối xứng, không đối xứng? Tất cả trong cách bạn cấu hình Cipher.
Bạn không cần phải sử dụng bất kỳ API cụ thể nào của BouncyCastle, chỉ các thuật toán mà nó cung cấp. Dưới đây là một ví dụ sử dụng các thuật toán mã hóa BouncyCastle PBE để mã hóa một String:
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);
}
}
Muối không được cố định .. –
Nếu bạn đang nhận được java.security.InvalidKeyException: Kích thước khóa bất hợp pháp ref: http://stackoverflow.com/a/6481658/234110 –
Trong khi đó là một câu trả lời gián tiếp cho câu hỏi của bạn, có lẽ bạn sẽ tìm thấy nó hữu ích để sử dụng jasypt để xử lý mã hóa.
đây là một ví dụ về cách để mã hóa một tập tin sử dụng jasypt: http://www.jasypt.org/encrypting-configuration.html
Và, đây là cách để cấu hình lâu đài bouncy là nhà cung cấp cho jasypt: http://www.jasypt.org/bouncy-castle.html
Thư viện bên thứ ba thứ hai để trừu tượng lần đầu tiên có thể thư viện của bên thứ ba không được yêu cầu? Nghe có vẻ là ý kiến hay đấy. – jarnbjo
Chúng tôi đang sử dụng jasypt và BouncyCastle. Jasypt xử lý mã hóa trong suốt và giải mã các cột cơ sở dữ liệu với Hibernate và BouncyCastle thực hiện mã hóa và giải mã thực tế. – Omniwombat
Bạn có thể xem doc java tại http://bouncycastle.org/docs/docs1.6/index.html
bạn có thể tải về các ví dụ từ trang này: http://eu.wiley.com/WileyCDA/WileyTitle/productCd-0764596330,descCd-DOWNLOAD.html
Vui lòng thêm một số chi tiết tại đây. Chỉ đề cập đến một số liên kết có thể phá vỡ trong tương lai. –
Nếu bạn không có bất kỳ lý do cụ thể để sử dụng BountyCastle, bạn có thể tìm thấy một hướng dẫn tốt và thông tin cơ bản về hỗ trợ mã hóa được tích hợp sẵn Java với một số ví dụ mã số here.
Điều đáng nói là BouncyCastle chỉ là một "nhà cung cấp" hoạt động trong khuôn khổ mật mã tích hợp (JCE). Nó thường được sử dụng bởi vì nó chứa một bộ nguyên thủy hoàn chỉnh hơn nhà cung cấp mặc định. – caf
BouncyCastle không phải là "chỉ là nhà cung cấp". Bạn cũng có thể sử dụng chức năng mã hóa của BouncyCastle thông qua API độc quyền của họ. Bạn nói đúng rằng BouncyCastle cung cấp các thuật toán mã hóa bổ sung, nhưng tôi hiếm khi thấy bất kỳ nhu cầu thực sự nào về những thuật toán này. Tuy nhiên, thường xuyên hơn, BouncyCastle được sử dụng cho chức năng đã được cung cấp bởi các nhà cung cấp bảo mật nhúng API và VM chuẩn. – jarnbjo
Nơi tốt nhất để tìm Bouncy Castle ví dụ mã java là phải đi qua các trường hợp thử nghiệm trong các bộ kiểm tra của lâu đài bouncy Bouncy Castle latest release java
Những dãy phòng thử nghiệm chứa không bị phản đối mã này có thể được sử dụng dễ dàng
- 1. Giải mã C# RSA sử dụng Lâu đài Bouncy
- 2. Tạo Chứng chỉ X509 bằng Lâu đài Bouncy Java
- 3. PBKDF2 trong Lâu đài Bouncy C#
- 4. Mật mã Java Bouncy Castle - Mã hóa với AES
- 5. Đọc RSA PrivateKey trong C# và Lâu đài Bouncy
- 6. Mã hóa và giải mã chuỗi lớn trong java bằng cách sử dụng RSA
- 7. Ví dụ về mã hóa tệp BouncyCastle PGP trong C#
- 8. Đọc Khóa công cộng PEM RSA Chỉ sử dụng Lâu đài Bouncy
- 9. C# Ví dụ về mã hóa AES256 bằng System.Security.Cryptography.Aes
- 10. Ví dụ về việc sử dụng LibSVM trong java
- 11. Ví dụ mã hóa JavaScript
- 12. Ví dụ về cách sử dụng TLoginCredentialService
- 13. .Net Lập trình Đăng ký PKCS # 10 Yêu cầu với Lâu đài Bouncy
- 14. Ví dụ về cách sử dụng SetupDiGetDeviceProperty
- 15. Ví dụ về Java BitSet
- 16. Ví dụ về xử lý xml nhưng sử dụng anti-xml thay vì Scala xml
- 17. Ví dụ về AES sử dụng Crypto ++
- 18. Tìm kiếm mã ví dụ về âm nhạc tiến hóa
- 19. ví dụ về việc sử dụng scala.collection.immutable.Set từ java
- 20. Ví dụ về Bison java
- 21. đặt mã ví dụ trong tài liệu bằng cách sử dụng sandcastle
- 22. CreateProcessWithTokenW - Ví dụ về cách sử dụng trong C#
- 23. Ví dụ về AIDL sử dụng
- 24. Ví dụ tốt về sử dụng libpurple?
- 25. Ví dụ về Java GAE DeferredTask?
- 26. Biến mã hóa byte trở lại thành ECPublicKey ban đầu trong Bouncy Castle
- 27. Ví dụ về việc sử dụng Generics.Collections.TObjectDictionary
- 28. Ví dụ về sử dụng cây Judy
- 29. Ví dụ về chủ đề Java?
- 30. Tôi có thể tìm thấy một số ví dụ về mã số Scales Xml
Đi với các liên kết của cb160, và cũng chắc chắn để có được mã nguồn cho bouncycastle. Tài liệu API hầu hết là người nghèo và thường rất nghèo. Tuy nhiên, mã nguồn khá dễ đọc và tôi thường sử dụng nó để trả lời các câu hỏi như "RijndaelEngine cần loại CipherParameters nào?". Chỉ cần nhìn vào phương pháp Rijndael có liên quan và nó sẽ hiển nhiên. –