add spring security and token management
This commit is contained in:
109
src/main/java/com/iconplus/smartproc/util/RSAUtil.java
Normal file
109
src/main/java/com/iconplus/smartproc/util/RSAUtil.java
Normal 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)));
|
||||
}
|
||||
|
||||
}
|
Reference in New Issue
Block a user