1、引入所需jar包
<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bcprov-ext-jdk15on</artifactId>
<version>1.62</version>
</dependency>
2、前端加载security.js文件
3、前端js代码
$.ajax({ //获取加密所需公钥指数和模
url:'${pageContext.request.contextPath}/system/key.html',
type:'get',
dataType:'json',
success:function(data){
if(data.type == 'success'){
//RSA加密
var publicKeyExponent=data.keys[0];
var publicKeyModulus=data.keys[1];
RSAUtils.setMaxDigits(200);
var key = new RSAUtils.getKeyPair(publicKeyExponent, "", publicKeyModulus);
var userPwdEncrypt= RSAUtils.encryptedString(key,password.split("").reverse().join("")); //使用公钥加密
$.ajax({ //登录请求
url:'${pageContext.request.contextPath}/system/login.html',
data:{userName:username, password:userPwdEncrypt, role:role, cpacha:cpacha},
type:'post',
dataType:'json',
success:function(data){
if(data.type == 'success'){
登录成功
}else{
登录失败
}
}
});
}else{
获取公钥失败
}
}
});
4、后端java代码
/**
* 获取公钥
* @return
*/
@RequestMapping(value = "/key", method = RequestMethod.GET)
public String getKey(HttpServletRequest request, HttpServletResponse response){
JSONObject result = new JSONObject();
try {
//keys[0]为公钥,keys[1]为模
String[] keys = rsaService.getPublicAndModulus(request);
result.put("type", "success");
result.put("keys",keys);
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
result.put("type", "error");
result.put("msg", "数据加载失败,请刷新重试");
}
ResponseUtil.write(response, result);
return null;
}<