@RestController @RequestMapping(value="/api") public class LoginController {
@Autowired RsaUtils rsaUtils;
@GetMapping(value="/login") public LoginVO loginController() {
LoginVO vo = new LoginVO(); vo.setLogin_a(rsaUtils.getPublicKeyModulus()); vo.setLogin_b(rsaUtils.getPublicKeyExponent()); return vo; }
@PostMapping(value="/login") public String loginController(@RequestBody LoginVO vo) { System.out.println("vo a : "+rsaUtils.decrypt(vo.getLogin_a())); System.out.println("vo b : "+rsaUtils.decrypt(vo.getLogin_b())); /* * rsaUtils.decript() 를 통해 복호화 한 후 로그인 값이 맞는지 확인한 후 return 한다. */ return "성공"; } }
public PublicKey getPublicKey() { return publicKey; }
public void setPublicKey(PublicKey publicKey) { this.publicKey = publicKey; }
public PrivateKey getPrivateKey() { return privateKey; }
public void setPrivateKey(PrivateKey privateKey) { this.privateKey = privateKey; }
public String getPublicKeyModulus() { return publicKeyModulus; }
public void setPublicKeyModulus(String publicKeyModulus) { this.publicKeyModulus = publicKeyModulus; }
public String getPublicKeyExponent() { return publicKeyExponent; }
public void setPublicKeyExponent(String publicKeyExponent) { this.publicKeyExponent = publicKeyExponent; }
public KeyPairGenerator getGen() { return gen; }
public void setGen(KeyPairGenerator gen) { this.gen = gen; }
public String decrypt(String secureInfo) { String secureDecryptInfo = ""; try{ Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding"); /** * 암호화 된 값은 byte 배열이다. * 이를 문자열 폼으로 전송하기 위해 16진 문자열(hex)로 변경한다. * 16진 문자열로 변경하기 위해 funcs이라는 utils 이용 * 서버에서 값을 받을 때 hex 문자열을 받아서 이를 다시 byte 배열로 바꾼 뒤에 복호화 과정을 수행한다. */ byte[] encryptedBytes = Funcs.hexToByteArray(secureInfo); if( encryptedBytes == null) return null; cipher.init(Cipher.DECRYPT_MODE, privateKey); byte[] decryptedBytes = cipher.doFinal(encryptedBytes); secureDecryptInfo = new String(decryptedBytes, "utf-8"); // 문자 인코딩 주의.