feat: add card number encryption utility
This commit is contained in:
@@ -0,0 +1,56 @@
|
||||
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 "****";
|
||||
}
|
||||
return (
|
||||
"**** **** **** " + cardNumber.substring(cardNumber.length() - 4)
|
||||
);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user