我们很多人都一直致力于用Javascript长一段时间以来,当过我问人们如何发送加密的数据,唯一的答案是使用SSL。但这篇文章说明了如何发送加密的数据,即使我们没有启用SSL。在许多情况下,这可以得心应手
我用jCryption和JavaScript库在Javascript和BouncyCastle库加密Javabackend到decypt
在这里的例子是流首先生成 服务器端的RSA密钥(存储在会话)。公共密钥发送到客户端(浏览器)JavaScript变量的存储密钥在所有后续请求使用该密钥加密的数据发送到服务器使用存储在会话NBSP中的密钥解密数据和发送响应到服务器
密钥生成Java实用工具类package com.linkwithweb.encryption;
import java.io.IOException;
import java.security.KeyPair;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class EncryptionServlet
*/
public class EncryptionServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* Default constructor.
*/
public EncryptionServlet() {
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#service(HttpServletRequest request, HttpServletResponse response)
*/
protected void service(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
if (request.getParameter("generateKeypair") != null) {
JCryptionUtil jCryptionUtil = new JCryptionUtil();
KeyPair keys = null;
if (request.getSession().getAttribute("keys") == null) {
keys = jCryptionUtil.generateKeypair(512);
request.getSession().setAttribute("keys", keys);
}
StringBuffer output = new StringBuffer();
String e = JCryptionUtil.getPublicKeyExponent(keys);
String n = JCryptionUtil.getPublicKeyModulus(keys);
String md = String.valueOf(JCryptionUtil.getMaxDigits(512));
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));
}
}
}
的所有客户端的代码是有index.jsp和framework.js
Javascript函数从服务器和存储在JavaScript变量的关键{C}
在登录按钮点击,这里是你如何加密和发送请求到服务器/**
* Called on Login Button clicked
*/
function onLoginButtonClicked() {
var user = $("#login_user").val();
var password = $("#login_password").val();
$.jCryption.encrypt(user, keys, function(encrypted) {
encryptedUser = encrypted;
$.jCryption.encrypt(password, keys, function(encryptedPasswd) {
encryptedPassword = encryptedPasswd;
/**
* As both userName and password are encrypted now Submit login
*/
submitLoginRequest();
});
});
}
/**
* Submit Login request
*/
function submitLoginRequest() {
sendAjaxRequest("LoginServlet", {
username : encryptedUser,
password : encryptedPassword
}, function(data) {
if (data.length > 0) {
$("#login_status").empty();
$("#login_status").append(data);
}
});
}
下面是SVN URL下载示例源代码
教程的下一个版本将会从Flex和Java。 NJOY阅读和打加密代码
{A} {七}| AshwinRayaprolu