Javascript端加密java服务端解密
通常我们会通过htts来保证传输安全,但如果我们不用https,如何通过javascript来保证浏览器端发送的参数进行加密,并且通过RSA算法来处理。
这里我们可以利用jquery的一个加密插件jcryption来处理,可以参考
现在版本是3.0 但是没有java端的实现,下次有时间再研究。现在这个用的是1.1的版本
这个可以在
不过他的服务端有个缺陷我修改了。
接来大致介绍如下:
1.首先服务端有产生publicKey的servlet:
package com.gsh.oauth.auth.servlet;
import java.io.IOException;
import java.security.KeyPair;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
importjavax.servlet.http.HttpServletRequest;
importjavax.servlet.http.HttpServletResponse;
import com.gsh.oauth.auth.util.JCryptionUtil;
/**
*Servlet implementation class EncryptionServlet
*/
public class EncryptionServlet extendsHttpServlet {
privatestatic final long serialVersionUID = 1L;
/**
* Default constructor.
*/
publicEncryptionServlet() {
//TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#service(HttpServletRequestrequest, HttpServletResponse response)
*/
protectedvoid service(HttpServletRequest request,
HttpServletResponseresponse) throws ServletException, IOException {
intKEY_SIZE = 1024;
if(request.getParameter("generateKeypair") != null) {
JCryptionUtiljCryptionUtil = new JCryptionUtil();
KeyPairkeys = null;
//if(request.getSession().getAttribute("keys") == null) { //这里注释掉否则第二次请求会500
keys= jCryptionUtil.generateKeypair(KEY_SIZE);
request.getSession().setAttribute("keys",keys);
//}
StringBufferoutput = new StringBuffer();
Stringe = JCryptionUtil.getPublicKeyExponent(keys);
Stringn = JCryptionUtil.getPublicKeyModulus(keys);
Stringmd = String.valueOf(JCryptionUtil.getMaxDigits(KEY_SIZE));
output.append("{\"e\":\"");
output.append(e);
output.append("\",\"n\":\"");
output.append(n);
output.append("\",\"maxdigits\":\"");
output.append(md);
output.append("\"}");
output.toString();
response.getOutputStream().print(
output.toString().replaceAll("\r","").replaceAll("\n", "")
.trim());
}else {
response.getOutputStream().print(String.valueOf(false));
}
}
}
2.Client例子
Login formcontent="text/html; charset=utf-8">
type="text/javascript">
src="../js/security/jquery.jcryption-1.1.min.js">
$(document).ready(function() {
var$statusText = $('').hide();
$("#status_container").append($statusText);
$("#lf").jCryption({
getKeysURL:"/gsh/oauth/encryption?generateKeypair=true",
beforeEncryption:function(){
$statusText
.text("Test Code")
.show();
returntrue;
},
encryptionFinished:function(
encryptedString,
objectLength){
$statusText
.text(encryptedString);
returntrue;
}
});
});
method="post">
login