Files
bank-rest/src/main/java/com/example/bankcards/util/CardEncryptionUtil.java
2026-02-24 15:40:32 +03:00

56 lines
1.8 KiB
Java

package com.example.bankcards.util;
import java.util.Base64;
import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
@Component
public class CardEncryptionUtil {
@Value("${app.card.encryption-key}")
private String encryptionKey;
private static final String ALGORITHM = "AES";
public String encrypt(String cardNumber) {
try {
SecretKeySpec keySpec = new SecretKeySpec(
encryptionKey.getBytes(),
ALGORITHM
);
Cipher cipher = Cipher.getInstance(ALGORITHM);
cipher.init(Cipher.ENCRYPT_MODE, keySpec);
byte[] encrypted = cipher.doFinal(cardNumber.getBytes());
return Base64.getEncoder().encodeToString(encrypted);
} catch (Exception e) {
throw new RuntimeException("Failed to encrypt card number", e);
}
}
public String decrypt(String encryptedCardNumber) {
try {
SecretKeySpec keySpec = new SecretKeySpec(
encryptionKey.getBytes(),
ALGORITHM
);
Cipher cipher = Cipher.getInstance(ALGORITHM);
cipher.init(Cipher.DECRYPT_MODE, keySpec);
byte[] decoded = Base64.getDecoder().decode(encryptedCardNumber);
byte[] decrypted = cipher.doFinal(decoded);
return new String(decrypted);
} catch (Exception e) {
throw new RuntimeException("Failed to decrypt card number", e);
}
}
public String mask(String cardNumber) {
if (cardNumber == null || cardNumber.length() < 4) {
return "****";
}
String lastFour = cardNumber.substring(cardNumber.length() - 4);
return "**** **** **** " + lastFour;
}
}