Ответ
Работал с криптографическими операциями с использованием стандартных Java-библиотек javax.crypto и java.security, а также сторонних библиотек для хеширования паролей.
1. Симметричное шифрование (AES): Используется для шифрования/дешифрования данных одним ключом.
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import java.util.Base64;
public class AesExample {
public static String encrypt(String plainText, SecretKey key) throws Exception {
Cipher cipher = Cipher.getInstance("AES");
cipher.init(Cipher.ENCRYPT_MODE, key);
byte[] encryptedBytes = cipher.doFinal(plainText.getBytes());
return Base64.getEncoder().encodeToString(encryptedBytes);
}
public static SecretKey generateKey() throws Exception {
KeyGenerator keyGen = KeyGenerator.getInstance("AES");
keyGen.init(256); // Размер ключа: 128, 192 или 256 бит
return keyGen.generateKey();
}
}
2. Асимметричное шифрование (RSA): Использует пару ключей: публичный для шифрования, приватный для дешифрования.
KeyPairGenerator keyGen = KeyPairGenerator.getInstance("RSA");
keyGen.initialize(2048);
KeyPair keyPair = keyGen.generateKeyPair();
3. Хеширование и хранение паролей: Прямое хеширование (SHA-256) небезопасно для паролей. Используются специальные алгоритмы.
- PBKDF2 (стандартный в Java):
PBEKeySpec spec = new PBEKeySpec(password.toCharArray(), salt, 310000, 256); SecretKeyFactory factory = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA256"); byte[] hash = factory.generateSecret(spec).getEncoded(); - BCrypt (рекомендуется, через библиотеку Spring Security или jBCrypt):
String hashedPassword = BCrypt.hashpw(plainPassword, BCrypt.gensalt()); boolean isMatch = BCrypt.checkpw(candidatePassword, hashedPassword);
4. Цифровые подписи (RSA, DSA): Для проверки целостности и авторства данных.
Важные практики:
- Не храните ключи в коде. Используйте secure vault (HashiCorp Vault, AWS KMS) или переменные окружения.
- Используйте криптографически стойкие генераторы случайных чисел (
SecureRandom). - Для паролей всегда используйте адаптивные функции хеширования (BCrypt, Argon2, PBKDF2) с солью (salt).