add spring security and token management

This commit is contained in:
dirgantarasiahaan
2023-05-23 19:42:51 +07:00
parent 597d4062c7
commit c76c01a174
35 changed files with 1095 additions and 53 deletions

View File

@@ -0,0 +1,109 @@
package com.iconplus.smartproc.util;
import com.iconplus.smartproc.exception.TechnicalException;
import lombok.extern.log4j.Log4j2;
import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.NoSuchPaddingException;
import java.security.*;
import java.security.spec.InvalidKeySpecException;
import java.security.spec.PKCS8EncodedKeySpec;
import java.security.spec.X509EncodedKeySpec;
import java.util.Base64;
@Log4j2
public class RSAUtil {
private RSAUtil(){
}
public static PrivateKey getPrivateKey(String base64PrivateKey){
PrivateKey privateKey = null;
PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(Base64.getDecoder().decode(base64PrivateKey.getBytes()));
try {
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
privateKey = keyFactory.generatePrivate(keySpec);
} catch (InvalidKeySpecException e) {
log.error("InvalidKeySpecException : "+e.getMessage());
throw new TechnicalException("80000", "InvalidKeySpecException : "+e.getMessage());
} catch (NoSuchAlgorithmException e) {
log.error("NoSuchAlgorithmException : "+e.getMessage());
throw new TechnicalException("80000", "NoSuchAlgorithmException : "+e.getMessage());
}
return privateKey;
}
public static PublicKey getPublicKey(String base64PublicKey){
PublicKey publicKey = null;
X509EncodedKeySpec keySpec = new X509EncodedKeySpec(Base64.getDecoder().decode(base64PublicKey.getBytes()));
try {
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
publicKey = keyFactory.generatePublic(keySpec);
} catch (InvalidKeySpecException e) {
log.error("InvalidKeySpecException : "+e.getMessage());
throw new TechnicalException("80000", "InvalidKeySpecException : "+e.getMessage());
} catch (NoSuchAlgorithmException e) {
log.error("NoSuchAlgorithmException : "+e.getMessage());
throw new TechnicalException("80000", "NoSuchAlgorithmException : "+e.getMessage());
}
return publicKey;
}
private static String decryptChipper(byte[] data, PrivateKey privateKey) {
try {
Cipher cipher = Cipher.getInstance("RSA/ECB/OAEPPadding");
cipher.init(Cipher.DECRYPT_MODE, privateKey);
return new String(cipher.doFinal(data));
} catch (NoSuchAlgorithmException e) {
log.error("NoSuchAlgorithmException : "+e.getMessage());
throw new TechnicalException("80000", "NoSuchAlgorithmException : "+e.getMessage());
} catch (NoSuchPaddingException e) {
log.error("NoSuchPaddingException : "+e.getMessage());
throw new TechnicalException("80000", "NoSuchPaddingException : "+e.getMessage());
} catch (InvalidKeyException e) {
log.error("InvalidKeyException : "+e.getMessage());
throw new TechnicalException("80000", "InvalidKeyException : "+e.getMessage());
} catch (IllegalBlockSizeException e) {
log.error("IllegalBlockSizeException : "+e.getMessage());
throw new TechnicalException("80000", "IllegalBlockSizeException : "+e.getMessage());
} catch (BadPaddingException e) {
log.error("BadPaddingException : "+e.getMessage());
throw new TechnicalException("80000", "BadPaddingException : "+e.getMessage());
}
}
private static byte[] encryptChipper(byte[] data, PublicKey publicKey) {
try {
Cipher cipher = Cipher.getInstance("RSA/ECB/OAEPPadding");
cipher.init(Cipher.ENCRYPT_MODE, publicKey);
return cipher.doFinal(data);
} catch (NoSuchAlgorithmException e) {
log.error("NoSuchAlgorithmException : "+e.getMessage());
throw new TechnicalException("80000", "NoSuchAlgorithmException : "+e.getMessage());
} catch (NoSuchPaddingException e) {
log.error("NoSuchPaddingException : "+e.getMessage());
throw new TechnicalException("80000", "NoSuchPaddingException : "+e.getMessage());
} catch (InvalidKeyException e) {
log.error("InvalidKeyException : "+e.getMessage());
throw new TechnicalException("80000", "InvalidKeyException : "+e.getMessage());
} catch (IllegalBlockSizeException e) {
log.error("IllegalBlockSizeException : "+e.getMessage());
throw new TechnicalException("80000", "IllegalBlockSizeException : "+e.getMessage());
} catch (BadPaddingException e) {
log.error("BadPaddingException : "+e.getMessage());
throw new TechnicalException("80000", "BadPaddingException : "+e.getMessage());
}
}
public static String decrypt(String data, String base64PrivateKey) {
return decryptChipper(Base64.getDecoder().decode(data.getBytes()), getPrivateKey(base64PrivateKey));
}
public static String encrypt(String data, String base64PublicKey) {
return Base64.getEncoder().encodeToString(encryptChipper(data.getBytes(), getPublicKey(base64PublicKey)));
}
}