반응형
먼저 js를 다운 받아야 합니다. ㅎㅎ
요기용
먼저 jsp에 추가해야 할것 다운받은 스크립트를 적용해줘야겠죠?
<script type="text/javascript" src="/resources/api/rsa2js/rsa.js"></script>
<script type="text/javascript" src="/resources/api/rsa2js/jsbn.js"></script>
<script type="text/javascript" src="/resources/api/rsa2js/prng4.js"></script>
<script type="text/javascript" src="/resources/api/rsa2js/rng.js"></script>
그리고 javascript에 추가해줘야 할 것
id 와 pw 는 뭔지 아시겠죠? input값입니다 ㅎㅎㅎ 참고용이니깐 잘 적용해보세요
function loginRSA(id,pw){
// rsa 암호화
var rsa = new RSAKey();
rsa.setPublic($('#RSAModulus').val(),$('#RSAExponent').val());
$("#UI_IDs").val(rsa.encrypt(id));
$("#UI_PASSWORD").val(rsa.encrypt(pw));
return true;
}
java에서 로그인 버튼 클릭 후 처리 되는 부분 입니당
PrivateKey privateKey = (PrivateKey) session.getAttribute(CommonMemberController.RSA_WEB_KEY);
String id = (idValue);
String password = (PwValue);
// 복호화
try {
id = CommonMemberController.decryptRsa(privateKey, id);
password = CommonMemberController.decryptRsa(privateKey, password);
} catch (Exception e) {
// TODO Auto-generated catch block
System.out.println("복호화 에러");
}
// 개인키 삭제
session.removeAttribute(CommonMemberController.RSA_WEB_KEY);
이거 전에 준비되어야 할 메소드 부분
public static String RSA_WEB_KEY ="";
public static String RSA_INSTANCE ="";
/**생성자 만들어주는 모습 **/
public CommonMemberController() {
RSA_WEB_KEY = "_RSA_WEB_Key_"; // 개인키 session key
RSA_INSTANCE = "RSA"; // rsa transformation
}
/**
* 복호화
*
* @param privateKey
* @param securedValue
* @return
* @throws Exception
*/
public static String decryptRsa(PrivateKey privateKey, String securedValue) throws Exception {
Cipher cipher = Cipher.getInstance(CommonMemberController.RSA_INSTANCE);
byte[] encryptedBytes = hexToByteArray(securedValue);
cipher.init(Cipher.DECRYPT_MODE, privateKey);
byte[] decryptedBytes = cipher.doFinal(encryptedBytes);
String decryptedValue = new String(decryptedBytes, "utf-8"); // 문자 인코딩 주의.
return decryptedValue;
}
/**
* 16진 문자열을 byte 배열로 변환한다.
*
* @param hex
* @return
*/
public static byte[] hexToByteArray(String hex) {
if (hex == null || hex.length() % 2 != 0) { return new byte[] {}; }
byte[] bytes = new byte[hex.length() / 2];
for (int i = 0; i < hex.length(); i += 2) {
byte value = (byte) Integer.parseInt(hex.substring(i, i + 2), 16);
bytes[(int) Math.floor(i / 2)] = value;
}
return bytes;
}
/**
* rsa 공개키, 개인키 생성
*
* @param request
*/
public void initRsa(HttpServletRequest request) {
HttpSession session = request.getSession();
KeyPairGenerator generator;
try {
generator = KeyPairGenerator.getInstance(CommonMemberController.RSA_INSTANCE);
generator.initialize(1024);
KeyPair keyPair = generator.genKeyPair();
KeyFactory keyFactory = KeyFactory.getInstance(CommonMemberController.RSA_INSTANCE);
PublicKey publicKey = keyPair.getPublic();
PrivateKey privateKey = keyPair.getPrivate();
session.setAttribute(CommonMemberController.RSA_WEB_KEY, privateKey); // session에 RSA 개인키를 세션에 저장
RSAPublicKeySpec publicSpec = (RSAPublicKeySpec) keyFactory.getKeySpec(publicKey, RSAPublicKeySpec.class);
String publicKeyModulus = publicSpec.getModulus().toString(16);
String publicKeyExponent = publicSpec.getPublicExponent().toString(16);
request.setAttribute("RSAModulus", publicKeyModulus); // rsa modulus 를 request 에 추가
request.setAttribute("RSAExponent", publicKeyExponent); // rsa exponent 를 request 에 추가
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
잘 추가 해주시면 쉽게 할 수 있습니다.!
화이팅
반응형
'자바' 카테고리의 다른 글
구글 번역 API 사용하기 - java (0) | 2021.05.11 |
---|---|
자바 TCP 모드버스 통신 소스 예제 (1) | 2021.05.06 |
Datepicker에 시간 추가 (0) | 2021.03.19 |
jar 파일 만들어서 서버에서 실행시키기 (0) | 2021.02.02 |
라즈베리파이 RXTX 라이브러리 적용 방법 (0) | 2021.01.27 |
댓글