Valeri173

Crypto2-1

Nov 22nd, 2024
18
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.71 KB | None | 0 0
  1. import javax.crypto.Cipher;
  2. import javax.crypto.SecretKey;
  3. import javax.crypto.SecretKeyFactory;
  4. import javax.crypto.spec.IvParameterSpec;
  5. import javax.crypto.spec.PBEKeySpec;
  6. import javax.crypto.spec.SecretKeySpec;
  7. import java.security.SecureRandom;
  8. import java.util.Base64;
  9.  
  10. public class CryptoAES {
  11.  
  12. public static SecretKey generateKey(String password, byte[] salt) throws Exception {
  13. SecretKeyFactory factory = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA256");
  14. PBEKeySpec spec = new PBEKeySpec(password.toCharArray(), salt, 65536, 256);
  15. SecretKey tmp = factory.generateSecret(spec);
  16. return new SecretKeySpec(tmp.getEncoded(), "AES");
  17. }
  18.  
  19. public static String encrypt(String plaintext, SecretKey key, IvParameterSpec iv) throws Exception {
  20. Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
  21. cipher.init(Cipher.ENCRYPT_MODE, key, iv);
  22. byte[] encrypted = cipher.doFinal(plaintext.getBytes());
  23. return Base64.getEncoder().encodeToString(encrypted);
  24. }
  25.  
  26. public static String decrypt(String ciphertext, SecretKey key, IvParameterSpec iv) throws Exception {
  27. Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
  28. cipher.init(Cipher.DECRYPT_MODE, key, iv);
  29. byte[] decrypted = cipher.doFinal(Base64.getDecoder().decode(ciphertext));
  30. return new String(decrypted);
  31. }
  32.  
  33. public static void main(String[] args) {
  34. try {
  35. String password = "securepassword123";
  36.  
  37. byte[] salt = new byte[16];
  38. SecureRandom random = new SecureRandom();
  39. random.nextBytes(salt);
  40. System.out.println("Salt (трябва да се сподели): " + Base64.getEncoder().encodeToString(salt));
  41.  
  42. byte[] ivBytes = new byte[16];
  43. random.nextBytes(ivBytes);
  44. IvParameterSpec iv = new IvParameterSpec(ivBytes);
  45. System.out.println("IV (трябва да се изпрати с криптираното съобщение): " + Base64.getEncoder().encodeToString(ivBytes));
  46.  
  47. SecretKey senderKey = generateKey(password, salt);
  48. String message = "Това е тайно съобщение!";
  49. String encryptedMessage = encrypt(message, senderKey, iv);
  50. System.out.println("Криптирано съобщение: " + encryptedMessage);
  51.  
  52. SecretKey receiverKey = generateKey(password, salt);
  53. String decryptedMessage = decrypt(encryptedMessage, receiverKey, iv);
  54. System.out.println("Декриптирано съобщение: " + decryptedMessage);
  55.  
  56. } catch (Exception e) {
  57. e.printStackTrace();
  58. }
  59. }
  60. }
Add Comment
Please, Sign In to add comment