rsa_js.zipRSA.java
홈페이지 SSL을 사용할 수 없는경우에 개인정보를 암호화 처리를 하여 전송을 하여야하는데 그방법중 하나가 RSA 암호화 입니다.
첫번째 RSA.java 파일 생성(첨부파일:RSA.java)
RSA.java 파일은 RSA암호화를 위해 공개키와 개인키를 생성하여 암호화 복호화를 실행하는 부분입니다.
두번째 로그인 페이지(jsp)로 넘어가는 자바에서 RSA.java에서 키값을 받아온다.
RSA rsa = RSA.getEncKey();
request.setAttribute("publicKeyModulus", rsa.getPublicKeyModulus());
request.setAttribute("publicKeyExponent", rsa.getPublicKeyExponent());
request.getSession().setAttribute("__rsaPrivateKey__", rsa.getPrivateKey());
세번째 로그인을 실행하는 jsp파일에서 자바스크립트 파일을 추가하고, (첨부파일:RSA_js.zip)
<script type="text/javascript" src="../js/util/jsbn.js"></script>
<script type="text/javascript" src="../js/util/rsa.js"></script>
<script type="text/javascript" src="../js/util/prng4.js"></script>
<script type="text/javascript" src="../js/util/rng.js"></script>
아이디와 비밀번호를 전송하기전에 암호화 처리를 해준다.(자바스크립트로 처리)
var rsaPublicKeyModulus = document.getElementById("rsaPublicKeyModulus").value;
var rsaPublicKeyExponent = document.getElementById("rsaPublicKeyExponent").value;
var encPassword = fnRsaEnc(document.getElementById("userPw").value, rsaPublicKeyModulus, rsaPublicKeyExponent);
document.frm.encPw.value = encPassword;
function fnRsaEnc(value, rsaPublicKeyModulus, rsaPpublicKeyExponent) {
var rsa = new RSAKey();
rsa.setPublic(rsaPublicKeyModulus, rsaPpublicKeyExponent);
var encValue = rsa.encrypt(value); // 사용자ID와 비밀번호를 RSA로 암호화한다.
return encValue;
}
(
*암호화 처리를 위해 jsp페이지 안에서 rsaPublicKeyModulus, rsaPublicKeyExponent, encPassword 를 input type="hidden" 처리를 해줘야한다.
ex)<input type="hidden" id="rsaPublicKeyModulus" value="${publicKeyModulus}">
<input type="hidden" id="rsaPublicKeyExponent" value="${publicKeyExponent}">
<input type="hidden" name="encPw" value="">
)
마지막으로 로그인을 처리하는 java파일에서 암호화된 비밀번호를 복호화한 후 로그인 처리를 하면 된다.
String encPw = DataUtil.notnull(param.get("encPw"));//암호화된 비밀번호를 받는다.
String decPw = RSA.decryptRsa((PrivateKey) request.getSession().getAttribute("__rsaPrivateKey__"), encPw);//암호화된 비밀번호를 복호화한다.
param.put("userPw", decPw);