- 浏览: 7936175 次
- 性别:
- 来自: 广州
文章分类
- 全部博客 (2425)
- 软件工程 (75)
- JAVA相关 (662)
- ajax/web相关 (351)
- 数据库相关/oracle (218)
- PHP (147)
- UNIX/LINUX/FREEBSD/solaris (118)
- 音乐探讨 (1)
- 闲话 (11)
- 网络安全等 (21)
- .NET (153)
- ROR和GOG (10)
- [网站分类]4.其他技术区 (181)
- 算法等 (7)
- [随笔分类]SOA (8)
- 收藏区 (71)
- 金融证券 (4)
- [网站分类]5.企业信息化 (3)
- c&c++学习 (1)
- 读书区 (11)
- 其它 (10)
- 收藏夹 (1)
- 设计模式 (1)
- FLEX (14)
- Android (98)
- 软件工程心理学系列 (4)
- HTML5 (6)
- C/C++ (0)
- 数据结构 (0)
- 书评 (3)
- python (17)
- NOSQL (10)
- MYSQL (85)
- java之各类测试 (18)
- nodejs (1)
- JAVA (1)
- neo4j (3)
- VUE (4)
- docker相关 (1)
最新评论
-
xiaobadi:
jacky~~~~~~~~~
推荐两个不错的mybatis GUI生成工具 -
masuweng:
(转)JAVA获得机器码的实现 -
albert0707:
有些扩展名为null
java 7中可以判断文件的contenttype了 -
albert0707:
非常感谢!!!!!!!!!
java 7中可以判断文件的contenttype了 -
zhangle:
https://zhuban.me竹板共享 - 高效便捷的文档 ...
一个不错的网络白板工具
http://www.blogjava.net/linugb118/archive/2014/05/09/413459.html
Javascript端加密java服务端解密
通常我们会通过htts来保证传输安全,但如果我们不用https,如何通过javascript来保证浏览器端发送的参数进行加密,并且通过RSA算法来处理。
这里我们可以利用jquery的一个加密插件jcryption来处理,可以参考
http://jcryption.org/#examples
现在版本是3.0 但是没有java端的实现,下次有时间再研究。现在这个用的是1.1的版本
这个可以在
http://linkwithweb.googlecode.com/svn/trunk/Utilities/jCryptionTutorial 获取
不过他的服务端有个缺陷我修改了。
接来大致介绍如下:
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;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.gsh.oauth.auth.util.JCryptionUtil;
/**
* 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 {
int KEY_SIZE = 1024;
if (request.getParameter("generateKeypair") != null) {
JCryptionUtil jCryptionUtil = new JCryptionUtil();
KeyPair keys = null;
//if (request.getSession().getAttribute("keys") == null) { //这里注释掉 否则第二次请求会500
keys = jCryptionUtil.generateKeypair(KEY_SIZE);
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(KEY_SIZE));
output.append("{\"e\":\"");
output.append(e);/Files/linugb118/bcprov-jdk15-1.46.jar.zip
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例子
<html>
<head>
<title>Login form</title>
</head>
<meta http-equiv="Content-Type"
content="text/html; charset=utf-8">
<script src="../js/jquery-1.4.2.min.js" type="text/javascript"></script>
<script src="../js/jquery-ui-1.8.2.custom.min.js"
type="text/javascript"></script>
<script type="text/javascript"
src="../js/security/jquery.jcryption-1.1.min.js"></script>
<script type="text/javascript">
$(document).ready(function() {
var $statusText = $('<span id="status"></span>').hide();
$("#status_container").append($statusText);
$("#lf").jCryption({
getKeysURL:"/gsh/oauth/encryption?generateKeypair=true",
beforeEncryption : function() {
$statusText
.text("Test Code")
.show();
return true;
},
encryptionFinished : function(
encryptedString,
objectLength) {
$statusText
.text(encryptedString);
return true;
}
});
});
</script>
<body>
<form id="lf" action="/gsh/oauth/authorization"
method="post">
<fieldset><legend>login</legend>
<div>
<div>client_id:<br>
<input type="text" size="45" name="client_id" value=""></div>
<div>redirect_uri:<br>
<input type="text" size="45" name="redirect_uri" value=""></div>
</div>
<div>loginid:<br>
<input type="text" size="45" name="loginid" value=""></div>
</div>
<div>password:<br>
<input type="password" size="45" name="password" value=""></div>
</div>
<div>
<p><input type="submit" /><span id="status_container"></span></p>
</div>
</fieldset>
</form>
</body>
</html>
上面看代码可以看出 他通过/gsh/oauth/encryption?generateKeypair=true来先请求获取public 然后通过jcryption进行加密 然后post到服务端。Encryption就是上面的EncryptionServlet。
通过浏览器工具可以看到表单里面的数据加密为
jCryption=95f1589502288050e08b4bd8b1a360341cf616d9054531b85a6ef85783c1723b46686ec454ee81f1304fa2370ce24c4d9c06f84d47aa4bdf99310ae12b514db19bfcc325f3a39a584c23b1546550f4e0635c12486f2fd84dec137e1c61cfa775dfa3057a1f0154712aaba0af0cc61810282780f15bed909c24a184e66ab39f2e
3. 目标servlet(authorization)的解密
public class Authorization extends HttpServlet {
protected void doGet(HttpServletRequest httpServletRequest,
HttpServletResponse httpServletResponse) throws ServletException,
IOException {
PrintWriter out = httpServletResponse.getWriter();
KeyPair keys = (KeyPair) httpServletRequest.getSession().getAttribute("keys");
String encrypted = httpServletRequest.getParameter("epCryption");
String client_id = null;
String redirect_uri = null;
String loginid = null;
String password = null;
try {
String data = JCryptionUtil.decrypt(encrypted, keys);
httpServletRequest.getSession().removeAttribute("keys");
Map params = JCryptionUtil.parse(data, "UTF-8");
client_id = (String) params.get("client_id");
redirect_uri = (String) params.get("redirect_uri");
loginid = (String) params.get("loginid");
password = (String) params.get("password");
} catch (Throwable e) {
e.printStackTrace();
}
}
}
上面至少片段,需要相关的js和java问题,请在svn上面获取。另外还需要bcprov-jdk15-1.46.jar
可以在http://mvnrepository.com/artifact/org.bouncycastle/bcprov-jdk15/1.46
获取。
Javascript端加密java服务端解密
通常我们会通过htts来保证传输安全,但如果我们不用https,如何通过javascript来保证浏览器端发送的参数进行加密,并且通过RSA算法来处理。
这里我们可以利用jquery的一个加密插件jcryption来处理,可以参考
http://jcryption.org/#examples
现在版本是3.0 但是没有java端的实现,下次有时间再研究。现在这个用的是1.1的版本
这个可以在
http://linkwithweb.googlecode.com/svn/trunk/Utilities/jCryptionTutorial 获取
不过他的服务端有个缺陷我修改了。
接来大致介绍如下:
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;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.gsh.oauth.auth.util.JCryptionUtil;
/**
* 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 {
int KEY_SIZE = 1024;
if (request.getParameter("generateKeypair") != null) {
JCryptionUtil jCryptionUtil = new JCryptionUtil();
KeyPair keys = null;
//if (request.getSession().getAttribute("keys") == null) { //这里注释掉 否则第二次请求会500
keys = jCryptionUtil.generateKeypair(KEY_SIZE);
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(KEY_SIZE));
output.append("{\"e\":\"");
output.append(e);/Files/linugb118/bcprov-jdk15-1.46.jar.zip
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例子
<html>
<head>
<title>Login form</title>
</head>
<meta http-equiv="Content-Type"
content="text/html; charset=utf-8">
<script src="../js/jquery-1.4.2.min.js" type="text/javascript"></script>
<script src="../js/jquery-ui-1.8.2.custom.min.js"
type="text/javascript"></script>
<script type="text/javascript"
src="../js/security/jquery.jcryption-1.1.min.js"></script>
<script type="text/javascript">
$(document).ready(function() {
var $statusText = $('<span id="status"></span>').hide();
$("#status_container").append($statusText);
$("#lf").jCryption({
getKeysURL:"/gsh/oauth/encryption?generateKeypair=true",
beforeEncryption : function() {
$statusText
.text("Test Code")
.show();
return true;
},
encryptionFinished : function(
encryptedString,
objectLength) {
$statusText
.text(encryptedString);
return true;
}
});
});
</script>
<body>
<form id="lf" action="/gsh/oauth/authorization"
method="post">
<fieldset><legend>login</legend>
<div>
<div>client_id:<br>
<input type="text" size="45" name="client_id" value=""></div>
<div>redirect_uri:<br>
<input type="text" size="45" name="redirect_uri" value=""></div>
</div>
<div>loginid:<br>
<input type="text" size="45" name="loginid" value=""></div>
</div>
<div>password:<br>
<input type="password" size="45" name="password" value=""></div>
</div>
<div>
<p><input type="submit" /><span id="status_container"></span></p>
</div>
</fieldset>
</form>
</body>
</html>
上面看代码可以看出 他通过/gsh/oauth/encryption?generateKeypair=true来先请求获取public 然后通过jcryption进行加密 然后post到服务端。Encryption就是上面的EncryptionServlet。
通过浏览器工具可以看到表单里面的数据加密为
jCryption=95f1589502288050e08b4bd8b1a360341cf616d9054531b85a6ef85783c1723b46686ec454ee81f1304fa2370ce24c4d9c06f84d47aa4bdf99310ae12b514db19bfcc325f3a39a584c23b1546550f4e0635c12486f2fd84dec137e1c61cfa775dfa3057a1f0154712aaba0af0cc61810282780f15bed909c24a184e66ab39f2e
3. 目标servlet(authorization)的解密
public class Authorization extends HttpServlet {
protected void doGet(HttpServletRequest httpServletRequest,
HttpServletResponse httpServletResponse) throws ServletException,
IOException {
PrintWriter out = httpServletResponse.getWriter();
KeyPair keys = (KeyPair) httpServletRequest.getSession().getAttribute("keys");
String encrypted = httpServletRequest.getParameter("epCryption");
String client_id = null;
String redirect_uri = null;
String loginid = null;
String password = null;
try {
String data = JCryptionUtil.decrypt(encrypted, keys);
httpServletRequest.getSession().removeAttribute("keys");
Map params = JCryptionUtil.parse(data, "UTF-8");
client_id = (String) params.get("client_id");
redirect_uri = (String) params.get("redirect_uri");
loginid = (String) params.get("loginid");
password = (String) params.get("password");
} catch (Throwable e) {
e.printStackTrace();
}
}
}
上面至少片段,需要相关的js和java问题,请在svn上面获取。另外还需要bcprov-jdk15-1.46.jar
可以在http://mvnrepository.com/artifact/org.bouncycastle/bcprov-jdk15/1.46
获取。
发表评论
-
复习:强迫线程顺序执行方式
2019-01-03 23:42 1568方法1: 三个线程,t1,t2,t3,如果一定要按顺序执行, ... -
(转)不错的前后端处理异常的方法
2019-01-02 23:16 2017前言 在 Web 开发中, 我们经常会需要处理各种异常, 这是 ... -
info q的极客时间大咖说等资料下载
2018-08-15 08:40 3463info q的极客时间大咖说等资料下载,还有不少思维导图 链 ... -
CXF 客户端超时时间设置(非Spring配置方式)
2018-07-03 22:38 2231import org.apache.cxf.endpoint. ... -
(转)synchronized关键字画像:正确打开方式
2018-06-14 09:25 489https://mp.weixin.qq.com/s/b3Sx ... -
CountDownLatch的例子
2018-06-13 14:10 683public class StatsDemo { ... -
两道面试题,带你解析Java类加载机制
2018-06-12 16:29 606https://mp.weixin.qq.com/s/YTa0 ... -
Spring中获取request的几种方法,及其线程安全性分析
2018-06-11 09:03 668https://mp.weixin.qq.com/s/KeFJ ... -
内部类小结
2018-06-06 10:25 432https://mp.weixin.qq.com/s/hErv ... -
JVM虚拟机小结1
2018-06-04 20:43 5381 jps -l //列出详细的类名和进程ID 2)jps ... -
windows下自带命令行工具查看CPU资源情况等
2018-06-04 12:53 3095微软提供了不少命令行 ... -
(收藏)深入分析Java的序列化与反序列化
2018-05-30 15:21 612https://mp.weixin.qq.com/s/T2Bn ... -
apache common包中的序列化工具
2018-05-30 09:10 1842什么是序列化 我们的 ... -
JAVA8 JVM的变化: 元空间(Metaspace)
2018-05-24 22:30 962本文将会分享至今为至我收集的关于永久代(Permanent G ... -
(转)服务器性能指标(一)——负载(Load)分析及问题排查
2018-05-21 21:03 1359原创: Hollis Hollis 负载 ... -
(转)对象复用
2018-05-20 15:27 856public class Student { priv ... -
mapreduce中入门中要注意的几点
2018-05-06 08:59 668在 mapreduce中,比如有如下的词: I love b ... -
HDFS的基本操作
2018-05-02 21:47 936-mkdir 在HDFS创建目录 ... -
一个不错的开源工具类,专门用来解析日志头部的,好用
2018-05-02 20:00 767一个不错的开源工具类,专门用来解析日志头部的,好用。 http ... -
介绍个不错的RESTFUL MOCK的工具wiremock
2018-04-27 21:02 1903介绍个不错的RESTFUL MOCK的工具wiremock,地 ...
相关推荐
RSA是一种非对称加密算法,它...总的来说,“RSA浏览器加密,服务端解密”的机制是现代Web应用中确保数据安全传输的一种常见策略,它结合了RSA非对称加密的优势和JavaScript的便利性,为用户提供了一道有效的安全防线。
JavaScript客户端RSA加密与Java服务端解密是一种常见的安全通信机制,尤其在Web应用中,用于保护敏感数据,如用户密码、API密钥等。这里我们将深入探讨这一过程,包括RSA算法的基本原理,JavaScript中的实现,以及...
这个TestRSA项目提供的应该是完整的示例代码,包括JS端的加密函数和Java端的解密Servlet,可以直接部署运行,帮助开发者理解和实践RSA加密的客户端-服务器通信。通过分析和运行这些代码,开发者可以深入理解RSA加密...
总的来说,"js加密服务端解密"是一种常见的安全通信模式,通过结合JavaScript和Java,利用RSA非对称加密算法,实现了客户端数据的加密和服务器端的安全解密,有效保护了用户的隐私和数据安全。在实际开发中,还需要...
在本文中,我们将深入探讨如何在前端JavaScript和后端Java中实现AES的加密与解密。 前端JavaScript实现AES加密: 1. **引入库**:前端通常会使用如CryptoJS这样的JavaScript库来实现AES加密。CryptoJS是一个开放...
java、Android、javaScript(可以改成vue)、ios AES加密通用,可在服务端加密,客户端解密,也可在客户端加密,服务端解密;由于csdn会自动把积分改到50,可以发邮件到1622007541@qq.com 免费送
总的来说,这篇博文提供了JS和JAVA结合使用RSA加密解密和签名的实践方法,对于理解和实现前后端数据安全传输具有指导意义。在实际项目中,应根据具体需求选择合适的加密强度和实现方式,同时结合其他安全措施,如...
在这个场景中,我们讨论的是前端使用jQuery配合crypto-js库进行AES加密,而后端通过PHP的openssl_decrypt函数进行解密。这是一个典型的客户端加密、服务器解密的模式,可以有效防止数据在传输过程中被截取。 **AES...
在提供的压缩包中,有两个Java文件(RSACrypt.java和RSACryptTest.java)和一个JavaScript文件(jsencrypt.min.js),这表明代码实现了RSA加密解密的Java版本和JavaScript版本,可以在客户端和服务端之间进行安全的...
在IT行业中,脚本加密与解密是一项关键的技术,尤其对于保护源代码、防止未授权访问和盗用来说至关重要。脚本加密解密器是一种工具,它的主要功能是将脚本代码进行加密处理,以使其在未经授权的情况下无法被轻易读取...
但需要注意,前端加密不能替代服务器端的安全措施,因为JavaScript代码是可以被分析的,所以敏感的加密密钥不应暴露在前端代码中。 **后台解密与比较:** 服务器接收到加密的数据后,使用预先存储的安全密钥进行...
在实际应用中,这种Java和JavaScript之间的RSA加密解密方案可以增强安全性,防止数据在传输过程中被窃取。但需要注意的是,RSA的效率较低,不适用于大量数据的加密,一般用于加密较小的密钥或者对其他算法的密钥进行...
在Web应用中,JavaScript常用于客户端加密,但往往需要与服务器端(如Java语言编写的服务端)进行数据交互,因此实现两边的加解密一致性是非常重要的。 在文件内容中提到了两种AES加密方式,一种需要密钥(key)和...
该项目采用数字信封技术,实现Java语言的加密解密请求设计,涵盖84个文件,包括54个Java源文件、7个XML配置文件、5个JavaScript文件、2个Vue和HTML文件、2个TypeScript和JSON文件,以及相关图片、配置和文档。...
服务端可能使用Java、Python、Node.js等服务器端语言实现AES解密,确保数据在传输过程中的安全。 在实际应用中,还需要注意以下几点: - 密钥管理:密钥的安全存储和交换至关重要,避免密钥泄露可能导致数据被破解...
5. **服务端执行**:部分敏感的JavaScript代码可以选择不在客户端执行,而是由服务器端处理后返回处理结果,从而避免了源代码的暴露。 6. **许可证验证**:在加密代码中嵌入许可证验证机制,确保代码只能在授权的...
然而,值得注意的是,提供的文件"hdjso.exe"似乎是一个Windows可执行文件,并非JavaScript代码或文档,因此无法直接从中获取JavaScript加密解密的具体实现。在实际项目中,应当根据具体需求选择合适的加密库和方法,...
服务器端的Java程序接收这些数据,使用私钥进行RSA解密,接着可能再使用AES解密数据,或者在服务器端使用AES对新生成的数据进行加密后再返回给前端。 4. **接口数据加解密**: 在Android、iOS和微信小程序这样的多...
总结来说,这个压缩包提供了一套完整的RSA加密解密解决方案,涵盖了客户端的JavaScript加密和服务器端的Java解密。通过这些工具,开发者可以在JSP应用中安全地处理用户的敏感信息,提升系统的安全性。