RSA算法加密Web页面密码提交和验证实测
理论可以参考百度;关于加密解密过程降解,觉得比较好的:一篇博文
因客户要求把web页面提交/验证改用RSA算法加密密文传递到后台:
1,js/jsp客户端部分RSA加密密码;
2,服务端Java解密;
基本流程:
a:以RSA算法在服务端生成密钥对(PublicKey,PrivateKey),session中保存私钥;
b:把公钥Base64编码为Base64字符串通过http response传递到前台;
c:客户端(js)读取公钥解码,以公钥为参数RSA算法加密‘用户密码’,编码为Base64String,提交至服务端;
d:服务端Base64转码‘用户密码’字符串,并以RSA算法(私钥为参数)解密
e:比较验证解密后的字符串密码;
实现的基本库:
1,客户端js库jsencrypt-2.1.0
2,服务端采用JDK API(java.security.*,javax.crypto.*),apache的commons-codec-1.9
实现细节问题:
1,jsencrypt只用到了加密过程,并且长度不能超过117个英文字符;
2,jdk解密时,密文超过128会出BadPaddingException异常;
3,所以在客户端大于117字符时按117长度分段加密,并按特定分隔符连接提交,在服务端分割字符串后分段解密还原;
代码:
(部分,不含Servlet)
客户端:
var enc = function(){var pubkeystr = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDekiyV+vuvwcqGG2gvVCy/YbL94ke3kWK2ffgiA9puLshrooaHUHVVSyKjnb2qO47ZFEAL41gTt5jY05+r1w/DdLLLjsN8N7rIwNHDmZ2UaitRR5Vo1d+aI4edS+58pUmzUvhQwxpIJSo7JqZtSAtx6OELSwlSUjC+fRX0wiWjHQIDAQAB";var crypt = new JSEncrypt();crypt.setKey(pubkeystr);var datastr = $("#data").val();var result = "";for(var i=0; i<datastr.length; i+=117){ // 应当: substring(i,i+117) //如果i+117< length;// 应当: substring(i,length)//如果i+117>lengthvar sub = datastr.substring(i,i+117);if (""===result){result = crypt.encrypt(sub);}else{result += ","+crypt.encrypt(sub);} }return result;}
服务端:
public static void createkeypair(){try {SecureRandom sr = new SecureRandom();KeyPairGenerator kpg = KeyPairGenerator.getInstance("RSA");kpg.initialize(1024, sr);KeyPair kp = kpg.genKeyPair();System.out.println("Generate KeyPair:");PrivateKey pvk = kp.getPrivate();String pvkb64 = Base64.encodeBase64String(pvk.getEncoded());System.out.println("PrivateKey(Base64String):\r\n"+pvkb64);PublicKey pbk = kp.getPublic();String pbk64 = Base64.encodeBase64String(pbk.getEncoded());System.out.println("PublicKey(Base64String):\r\n"+pbk64); } catch (NoSuchAlgorithmException e) {System.err.println(e.toString());}}public static byte[] decspec(byte[] keyv, byte[] encdata) throws NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeySpecException, InvalidKeyException, IllegalBlockSizeException, BadPaddingException{PKCS8EncodedKeySpec pkcs8KeySpec = new PKCS8EncodedKeySpec(keyv); //编码标准 //PKCS8解密 配合 X509加密 PrivateKey pvk = KeyFactory.getInstance("RSA").generatePrivate(pkcs8KeySpec);Cipher ce = Cipher.getInstance(pvk.getAlgorithm());ce.init(Cipher.DECRYPT_MODE, pvk);return ce.doFinal(encdata);}public static void decBase64Array(){//分段得到,OKString encodedata3 = "rOMx3LB0+n5J2OJBzZN8p2U+Q2uIlMvQbeSTnWqzU1tcUYreYh4fXEwSIAwgfsCMLCnmRLD0Rh3qx3+4d3lHZAo/eWKtSgjOH2fqxtzvnlDMiKVpU0OHCd441EUnlfDCJyKC5z5iC6uNOiGbzKNtmhpvz+18wbCuDV9CoCI49Pk=,OpFfPpYm2rbJYzflRg8hiRY+PSUcGECFTs7nq9bVgkeLBi+e7yU3reOkLCMr/WK9LvGNFAhQl+pZftSeh+4XZQGIcOZVgHarFS7GYdhy9xnEq3cocRR1mnIHlq7NVLR18QJYsE+pCs/oi1rRpNXw5KG6C2cywDl8/JuqsWnYRaw=,FbGedocEygHd/+MTztmHJrPb4nSW4wrJ29piSvvmKoajZRJbWukWIulqlzSQ87Vxem0OPYa3cIsVLOGZkhq5qnfkG7EDm9LijFLVTUbnZ9T3pfQOaSXC9gUjAi5ut9AzGVwKEmImIOQjOeHBvYpUkgn6G/J8YLH6L0obd9lFTMQ=";String privatekstr = "MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAN6SLJX6+6/ByoYbaC9ULL9hsv3iR7eRYrZ9+CID2m4uyGuihodQdVVLIqOdvao7jtkUQAvjWBO3mNjTn6vXD8N0ssuOw3w3usjA0cOZnZRqK1FHlWjV35ojh51L7nylSbNS+FDDGkglKjsmpm1IC3Ho4QtLCVJSML59FfTCJaMdAgMBAAECgYBVFTIAH5LpTD68Z2u7dAUrIBEJpt/dl7FRq/QYJLryleW958Jfpe1ErtVOELX5ho0EBQ66vKzl1LCUasnGKg925Pb4n4QX+PN3V2pBlJy8l5rCtkCmFOptd5+4NLQoYJ2rdi3oIZuMG+JxrVZCqkOJSiPb9JVY/FnrJjNfnYqvTQJBAPJj8jUbSdFy9MH/B2N1gXTzanZO5aXrqbsG2u4ov3JSNHhMX4RMm1eAwA9d+jUMXdDz9d5YvLFi8+Gytuc0h0MCQQDrEVlcTnRWh5ZpI41UxxRatAp9U/9LIOK5r4z92WNaABaeVB9v6oD7k90BWudfu+r9B6kdqxTJx8cm50uJ2JYfAkAaiXSv+b/YLXS8dHZTnj7BFhE2yKZ9xtI7RqHbZxymoHdcIEhozJZJOzBLvmcxPZxbzwnBAQgPh5zZvd4ma+rPAkEA6Th3TmvQZSF1C69oQ5qZCTzjw2CZQ/LGv6/61MjgF6VKy59u6Vzix7f2Z6fHM2aASLdXBMZ+g4wgfOqyOXuXxQJBAJnkkFC46rhJH0NXWOYtWpzVBSs1pZBmxIbUHo1l5aHwPufbkvpd7cDnsou63NapCZdK7nf8t9u6pjFn9YNCTMQ=";String[] arrs = encodedata3.split("\\,");for (int i = 0; i < arrs.length; i++) {byte[] data = Base64.decodeBase64(arrs[i]);//解码,得到RSA加密的数据byte[] pvencoded = Base64.decodeBase64(privatekstr);//解码,得到私钥数据 try { byte[] databytes = decspec(pvencoded,data);//解密 System.out.println("Recovered data:\r\n" + new String(databytes,"utf-8"));} catch (Exception e) {System.err.println(e.toString());} }}
RSA算法加密Web页面密码提交和验证实测相关推荐
- 用RSA算法加密文本文件
用RSA算法加密文本文件 写文目的 任务说明 代码实现 (1)RSA加密比较小的txt文件 (2)生成1M和1G的txt文件 (3)加密1M的txt文件 调试过程 写文目的 当时参照网上其他文章写的, ...
- JAVA RSA算法加密实现 eclipse
RSA算法加密实现 一.实验目的 学习经典的RSA公钥加密算法的基本原理和特点,能够编写简单的代码实现RSA公钥加密和私钥解密的过程. 二.实验要求 1. 熟悉RSA公私钥加密算法. 2. 掌握如何使 ...
- RSA算法加密解密举例
RSA算法加密解密举例 使用如下数字字母对照表: 明文M="its all greek to me" ,p=47,q=59,e=17,求出其密文以及给出RSA 算法加/解密过程.( ...
- .NET Core 使用RSA算法 加密/解密/签名/验证签名
前言 前不久移植了支付宝官方的SDK,以适用ASP.NET Core使用支付宝支付,但是最近有好几位用户反应在Linux下使用会出错,调试发现是RSA加密的错误,下面具体讲一讲. RSA在.NET C ...
- Unity SKFramework框架(二十五)、RSA算法加密、签名工具 RSA Crypto
目录 简介 函数 1.pem公钥内容转xml 2.pem私钥内容转xml 3.使用公钥对数据进行加密 4.使用私匙对待签名内容进行签名 示例 简介 在调用Java后端接口,需要使用后端提供的pem私钥 ...
- 安全不安全002:C#实现RSA算法加密解密
通过前面的文章我们学会了如何生成公钥和私钥,详见这篇文章:https://blog.csdn.net/yysyangyangyangshan/article/details/80368397. 那么, ...
- JS逆向-RSA算法加密(房天下模拟登录)
前言 该文章为学习使用,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关!如有侵权,请私信联系作者删除~ 需求 模拟登录 目标网站:aHR0cHM6Ly9wYXNzcG9ydC5mYW5 ...
- web页面密码修改测试
今天注册公众号的修改密码功能发现密码修改成 123&q=q后,公众号登录提示账号密码错误,问研发因为js在获取页面参数时从特殊字符处截断,之后的数据获取不到导致登录失败. 原因是软件没对这些特 ...
- kisso改用RSA算法加密token
kisso 默认的加密算法是 HS512,为了增加加密强度,建议使用 RSA 加密. 生成密钥对 首先按照文档中给出的方式生成私钥和证书,方法如下: 生成私钥 $ keytool -genkeypai ...
最新文章
- 【驱动】GPIO寄存器配置总结
- VM 与容器之争!Docker赢了!
- 第二期安全狗讲坛3月11日开始
- ASP.NET MVC Html.ActionLink使用说明
- 内核电源管理器已启动关机转换_Linux系统启动流程
- Kubernetes中部署Docker registry2.7.1并通过containerd实现拉取镜像到应用Pod的部署
- 图片碎片化mask动画
- python sklearn下载了但是引用失败_关于python:导入sklearn时出错
- [SQL]批量修改存储过程视图
- 在Java 里面怎么比较字符串
- 解决朋友圈压缩_朋友中最有趣的朋友[已解决]
- 深夜,我偷听到程序员要对session下手......
- Java写播放器好写吗_java写mp3播放器
- Producer Consumer
- Linux的用户和组管理
- Java进阶:Spring
- git不小心删除文件后,如何获取?
- 计算机网络安全基础知识
- 浅谈渗透中的黑盒测试白盒测试
- 一条公链的坎坷进化路 |链捕手
热门文章
- 移动App开发日志开发实例
- 用《捕鱼达人3》讲解Cocos引擎3D技术(一):加载鱼的模型和播放动画
- 论文发表需要的重复率是多少?
- git单机, 远程仓库, 分支管理
- 哲学与科技——唯物史观,人与自然、科学与技术、科技与社会、人与科技的关系的简单描述
- 记:一次单板的意外串口异常解决(下)——PC端
- linux文件比对去重,linux文件去重工具findup, fslint-gui
- 【手把手教你树莓派3 (六)】使用 motion 和 mjpg 做视频监控器
- 哈佛公开课--网易公开课笔记--积极心理学
- 大数据测评/大数据技术与应用 - 电子书下载(高清版PDF格式+EPUB格式)