理论可以参考百度;关于加密解密过程降解,觉得比较好的:一篇博文

因客户要求把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页面密码提交和验证实测相关推荐

  1. 用RSA算法加密文本文件

    用RSA算法加密文本文件 写文目的 任务说明 代码实现 (1)RSA加密比较小的txt文件 (2)生成1M和1G的txt文件 (3)加密1M的txt文件 调试过程 写文目的 当时参照网上其他文章写的, ...

  2. JAVA RSA算法加密实现 eclipse

    RSA算法加密实现 一.实验目的 学习经典的RSA公钥加密算法的基本原理和特点,能够编写简单的代码实现RSA公钥加密和私钥解密的过程. 二.实验要求 1. 熟悉RSA公私钥加密算法. 2. 掌握如何使 ...

  3. RSA算法加密解密举例

    RSA算法加密解密举例 使用如下数字字母对照表: 明文M="its all greek to me" ,p=47,q=59,e=17,求出其密文以及给出RSA 算法加/解密过程.( ...

  4. .NET Core 使用RSA算法 加密/解密/签名/验证签名

    前言 前不久移植了支付宝官方的SDK,以适用ASP.NET Core使用支付宝支付,但是最近有好几位用户反应在Linux下使用会出错,调试发现是RSA加密的错误,下面具体讲一讲. RSA在.NET C ...

  5. Unity SKFramework框架(二十五)、RSA算法加密、签名工具 RSA Crypto

    目录 简介 函数 1.pem公钥内容转xml 2.pem私钥内容转xml 3.使用公钥对数据进行加密 4.使用私匙对待签名内容进行签名 示例 简介 在调用Java后端接口,需要使用后端提供的pem私钥 ...

  6. 安全不安全002:C#实现RSA算法加密解密

    通过前面的文章我们学会了如何生成公钥和私钥,详见这篇文章:https://blog.csdn.net/yysyangyangyangshan/article/details/80368397. 那么, ...

  7. JS逆向-RSA算法加密(房天下模拟登录)

    前言 该文章为学习使用,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关!如有侵权,请私信联系作者删除~ 需求 模拟登录 目标网站:aHR0cHM6Ly9wYXNzcG9ydC5mYW5 ...

  8. web页面密码修改测试

    今天注册公众号的修改密码功能发现密码修改成 123&q=q后,公众号登录提示账号密码错误,问研发因为js在获取页面参数时从特殊字符处截断,之后的数据获取不到导致登录失败. 原因是软件没对这些特 ...

  9. kisso改用RSA算法加密token

    kisso 默认的加密算法是 HS512,为了增加加密强度,建议使用 RSA 加密. 生成密钥对 首先按照文档中给出的方式生成私钥和证书,方法如下: 生成私钥 $ keytool -genkeypai ...

最新文章

  1. 【驱动】GPIO寄存器配置总结
  2. VM 与容器之争!Docker赢了!
  3. 第二期安全狗讲坛3月11日开始
  4. ASP.NET MVC Html.ActionLink使用说明
  5. 内核电源管理器已启动关机转换_Linux系统启动流程
  6. Kubernetes中部署Docker registry2.7.1并通过containerd实现拉取镜像到应用Pod的部署
  7. 图片碎片化mask动画
  8. python sklearn下载了但是引用失败_关于python:导入sklearn时出错
  9. [SQL]批量修改存储过程视图
  10. 在Java 里面怎么比较字符串
  11. 解决朋友圈压缩_朋友中最有趣的朋友[已解决]
  12. 深夜,我偷听到程序员要对session下手......
  13. Java写播放器好写吗_java写mp3播放器
  14. Producer Consumer
  15. Linux的用户和组管理
  16. Java进阶:Spring
  17. git不小心删除文件后,如何获取?
  18. 计算机网络安全基础知识
  19. 浅谈渗透中的黑盒测试白盒测试
  20. 一条公链的坎坷进化路 |链捕手

热门文章

  1. 移动App开发日志开发实例
  2. 用《捕鱼达人3》讲解Cocos引擎3D技术(一):加载鱼的模型和播放动画
  3. 论文发表需要的重复率是多少?
  4. git单机, 远程仓库, 分支管理
  5. 哲学与科技——唯物史观,人与自然、科学与技术、科技与社会、人与科技的关系的简单描述
  6. 记:一次单板的意外串口异常解决(下)——PC端
  7. linux文件比对去重,linux文件去重工具findup, fslint-gui
  8. 【手把手教你树莓派3 (六)】使用 motion 和 mjpg 做视频监控器
  9. 哈佛公开课--网易公开课笔记--积极心理学
  10. 大数据测评/大数据技术与应用 - 电子书下载(高清版PDF格式+EPUB格式)