解决密码明文传输的方案,基本有两种解决方案

1,将项目网站全站升级为https协议(如果要更谨慎,还需要加密)。

2,将密码进行加密后,在后台解密。

因项目升级https时间周期太长。将暂时替代方案改为RSA加密解密方式:

最简单的方案,前端加密,后端解密。未涉及到私钥签名等验证。但工具类内提供方法,相信各位一看即懂。

1,前端js引入jsencrypt.js(官网有下载资源。可免费下载(但不兼容ie浏览器,在ie9以下使用会导致js报错SCRIPT1010,具体原因可自行google或百度)。本博客下载资源内有兼容IE的版本,有需要的小伙伴可以下载)。

2,在前端js中使用方法:

    var passWord = document.getElementById("j_password");//密码RSA加密var encrypt = new JSEncrypt();encrypt.setPublicKey("MIGfMA0GC4351345135134534");//此处为RSA公钥var passwordRSA = encrypt.encrypt(passWord.value);

3,将密码密文传输后台

4,后台java的工具类

注:公钥私钥可以根据本工具类的initkey()方法生成。生成后将公钥私钥存储,具体存储看各位自己需求

/*** @Auther: pluto* @Date: 2019/2/27 10:09* @Description: RSAutil*/
public class RSAUtils {private static Log log = LogFactory.getLog(RSAUtils.class);private static final String KEYALGORITHM = "RSA";private static final String SIGNATUREALGORITHM = "MD5withRSA";private static final String PUBLICKEY = "RSAPublicKey";private static final String PRIVATEKEY = "RSAPrivateKey";//rsa私钥  或者可从配置文件读取。public static final String DECRYPTPRIVATEKEY = "MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAIMzJa4oZpQcPhRDTIaWnF4olSaeGt5oV0XFwoeeSK+FZ3lc4N34523tdfasgba";private RSAUtils(){super();}public static byte[] decryptBASE64(String key) {Base64 base64 = new Base64();return base64.decode(key);}public static String encryptBASE64(byte[] bytes) {Base64 base64 = new Base64();return base64.encodeToString(bytes);}/***** @param data** @param privateKey** @return* @throws Exception*/public static String sign(byte[] data, String privateKey){try {byte[] keyBytes = decryptBASE64(privateKey);PKCS8EncodedKeySpec pkcs8KeySpec = new PKCS8EncodedKeySpec(keyBytes);KeyFactory keyFactory = KeyFactory.getInstance(KEYALGORITHM);PrivateKey priKey = keyFactory.generatePrivate(pkcs8KeySpec);Signature signature = Signature.getInstance(SIGNATUREALGORITHM);signature.initSign(priKey);signature.update(data);return encryptBASE64(signature.sign());}catch (Exception e){log.error("RSAUtilsSignError");return "";}}/***** @param data** @param publicKey** @param sign** @return* @throws Exception*/public static boolean verify(byte[] data, String publicKey, String sign){try {byte[] keyBytes = decryptBASE64(publicKey);X509EncodedKeySpec keySpec = new X509EncodedKeySpec(keyBytes);KeyFactory keyFactory = KeyFactory.getInstance(KEYALGORITHM);PublicKey pubKey = keyFactory.generatePublic(keySpec);Signature signature = Signature.getInstance(SIGNATUREALGORITHM);signature.initVerify(pubKey);signature.update(data);return signature.verify(decryptBASE64(sign));}catch (Exception e){log.error("RSAUtilsVerifySignError");return false;}}public static byte[] decryptByPrivateKey(byte[] data, String key){try {byte[] keyBytes = decryptBASE64(key);PKCS8EncodedKeySpec pkcs8KeySpec = new PKCS8EncodedKeySpec(keyBytes);KeyFactory keyFactory = KeyFactory.getInstance(KEYALGORITHM);Key privateKey = keyFactory.generatePrivate(pkcs8KeySpec);Cipher cipher = Cipher.getInstance(keyFactory.getAlgorithm());cipher.init(Cipher.DECRYPT_MODE, privateKey);return cipher.doFinal(data);}catch (Exception e){log.error("RSAUtilsPrivateKeyDecryptError");return new byte[0];}}/**** @param data* @param key* @return* @throws Exception*/public static byte[] decryptByPrivateKey(String data, String key){return decryptByPrivateKey(decryptBASE64(data), key);}/**** @param data* @param key* @return* @throws Exception*/public static byte[] decryptByPublicKey(byte[] data, String key){try {byte[] keyBytes = decryptBASE64(key);X509EncodedKeySpec x509KeySpec = new X509EncodedKeySpec(keyBytes);KeyFactory keyFactory = KeyFactory.getInstance(KEYALGORITHM);Key publicKey = keyFactory.generatePublic(x509KeySpec);Cipher cipher = Cipher.getInstance(keyFactory.getAlgorithm());cipher.init(Cipher.DECRYPT_MODE, publicKey);return cipher.doFinal(data);}catch (Exception e){log.error("RSAUtilsPublicKeyDecryptError");return new byte[0];}}/**** @param data* @param key* @return* @throws Exception*/public static byte[] encryptByPublicKey(String data, String key) {try {byte[] keyBytes = decryptBASE64(key);X509EncodedKeySpec x509KeySpec = new X509EncodedKeySpec(keyBytes);KeyFactory keyFactory = KeyFactory.getInstance(KEYALGORITHM);Key publicKey = keyFactory.generatePublic(x509KeySpec);Cipher cipher = Cipher.getInstance(keyFactory.getAlgorithm());cipher.init(Cipher.ENCRYPT_MODE, publicKey);return cipher.doFinal(data.getBytes());}catch (Exception e){log.error("RSAUtilsPublicKeyEncryptError");return new byte[0];}}/**** @param data* @param key* @return* @throws Exception*/public static byte[] encryptByPrivateKey(byte[] data, String key){try {byte[] keyBytes = decryptBASE64(key);PKCS8EncodedKeySpec pkcs8KeySpec = new PKCS8EncodedKeySpec(keyBytes);KeyFactory keyFactory = KeyFactory.getInstance(KEYALGORITHM);Key privateKey = keyFactory.generatePrivate(pkcs8KeySpec);Cipher cipher = Cipher.getInstance(keyFactory.getAlgorithm());cipher.init(Cipher.ENCRYPT_MODE, privateKey);return cipher.doFinal(data);}catch (Exception e){log.error("RSAUtilsPrivateKeyEncryptError");return new byte[0];}}/**** @param keyMap* @return* @throws Exception*/public static String getPrivateKey(Map<String, Key> keyMap){if(keyMap != null){Key key = keyMap.get(PRIVATEKEY);return encryptBASE64(key.getEncoded());}else{return "";}}/**** @param keyMap* @return* @throws Exception*/public static String getPublicKey(Map<String, Key> keyMap){if(keyMap != null){Key key = keyMap.get(PUBLICKEY);return encryptBASE64(key.getEncoded());}else {return "";}}/**** @return* @throws Exception*/public static Map<String, Key> initKey(){try {KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance(KEYALGORITHM);keyPairGen.initialize(2048);KeyPair keyPair = keyPairGen.generateKeyPair();Map<String, Key> keyMap = new HashMap(2);keyMap.put(PUBLICKEY, keyPair.getPublic());keyMap.put(PRIVATEKEY, keyPair.getPrivate());return keyMap;} catch (NoSuchAlgorithmException e) {log.error("RSAUtilsInitKeyError");return null;}}
}

5,接取并解密

注:若为ajax传输,可不必转码,若form表单形式提交,js会自动转码,后台需要解码。(也可统一解码,毕竟没什么影响)

代码如下:

     String pass=request.getParameter("pass");//此处进行密码的解密 begintry {pass = URLDecoder.decode(pass,"UTF-8").replace(' ', '+');} catch (UnsupportedEncodingException e1) {return new ModelAndView(this.getErrorView());}byte[] decryptData = RSAUtils.decryptByPrivateKey(pass,RSAUtils.DECRYPTPRIVATEKEY);String decryptPas = "";if(decryptData.length == 0){return new ModelAndView(this.getErrorView());}else{decryptPas = new String(decryptData);}//此处进行密码的解密 end

获取到解密后的密码走正常的业务流程即可!

网站密码明文传输解决方案js+java相关推荐

  1. 浅谈“密码明文传输”

    一:漏洞名称: 密码明文传输 描述: 明文传输一般存在于web网站登陆页面,用户名密码采取明文传输并未采取加密(注意:一些软件如BurpSuite带有可加密的暴力破解!)容易被嗅探软件截取(如果加密方 ...

  2. FTP-用户名密码明文传输

    一.实验原理 FTP协议用于用户认证的过程中,客户端与服务器是通过明文进行交互信息的. 二.实验环境 目标主机:Win2K3 192.168.20.145 攻击主机:Kali2 192.168.20. ...

  3. 登录 ajax密码明文,若依框架渗透测试用户名密码明文传输问题

    解决思路,前端js加密,controller层解密 1.前端加密 引入js(jsencrypt.min.js) 个人备份js function login() { $.modal.loading($( ...

  4. java web系统明文密码加密传输

    最近项目PL提出系统数据越权和明文密码传输问题,涉及网络安全的问题,这让我一脸懵逼,查阅相关资料后做相关记录 1. 数据越权: 涉及重要功能需要验证用户是否当前用户操作,修改密码功能接口参数用户Id人 ...

  5. PHP密码问题陈婷代码_登录中利用JS前端加密PHP后端解密保证数据非明文传输的安全方法...

    为什么要研究这个呢,因为我所在单位的信息管理部门在监控系统上发现有大量的明文账号(身份证号)和密码在传输,被告知这很不安全,索性就直接解决这个问题,利用JS前端加密PHP后端再加密来解决这个问题,保证 ...

  6. 前端JS RSA加密,PHP后端解密实现密码安全传输

    在设计用户注册登陆系统的时候,密码的安全传输一直是一个需要特别引起注意的地方,很多网站包括大型网站依然还是采用明文传输密码的方式,安全隐患需要注意.当然,为了防止第三人的恶意窃听,不少网站已经启用了H ...

  7. 漏洞解决方案-明文传输漏洞

    漏洞解决方案-明文传输漏洞 漏洞解决方案-明文传输漏洞 一.漏洞概述 二.利用方法和手段 三.漏洞防御解决方法 漏洞解决方案-明文传输漏洞 一.漏洞概述 敏感数据明文传输简单点来说就是当我们在网站上面 ...

  8. 【产品】密码明文显示的必要性和解决方案

    为什么要显示密码明文? 密码输入方面的可用性问题被诟病已久.复杂的安保要求(最少xx个字符.必需包含标点符号和大写字符...)以及难用的输入方式等等时常会使用户产生强烈的挫败感,甚至蒙受损失. 数据显 ...

  9. Linux下wireshark抓包验证telnet明文传输密码

    Host-A IP:192.168.56.129 OS:RHEL5.9 32bit Service:telnet-server Host-B IP:192.168.56.128 OS:RHEL5.9 ...

最新文章

  1. 判断两个图片的特征向量_响应式布局提高篇 图片正确的打开方式
  2. SR:嗜酸古菌的代谢和进化模式
  3. 做 AI 大咖在顶级单位之间随兴漂移,好开心!
  4. 小余学调度:学习记录(2022.2,3)
  5. 中国房地产官媒爆乐视投资国贸地产,布局AI智能家居生态
  6. 9.IDA-重新设置函数类型、创建数组结构
  7. 如此生猛的纪录片,背后是难以置信的故事!
  8. javaweb(03) jQuery学习笔记
  9. ❤️大佬都在学什么?Python爬虫分析C站大佬收藏夹,跟着大佬一起学, 你就是下一个大佬❤️!
  10. 把一个下拉框中的选项添加到另一个中
  11. springboot默认数据源如何设置连接数_Spring Boot学习:如何使用Druid数据源
  12. java物业管理系统描述,基于java小区物业管理系统.doc
  13. 三年经验前端vue面试记录
  14. 开源项目推荐:OpenGL/Vulkan/Cairo/Skia/angle/VTK/OpenVG/MyPaint/GIMP/Krita/Pencil2D/inkspace/enve等绘图库或画图软件
  15. JAVA面试题集(2) (转)
  16. ESP32-BMP180气压、气温传感器
  17. JS逆向入门学习之回收商网,手机号码简易加密解析
  18. appcrash php5ts.dll,appcrash
  19. 做人和做事哪个是前提
  20. 【数据制造】江苏省自然资源类预算公布,看“十三五”规划如何影响我们的测绘地理信息项目。

热门文章

  1. 初学者怎么学习Java
  2. 读《谁动了我的奶酪》---做一个新人
  3. 谁动了我的奶酪:奶酪墙上的话 ----- 总结精典篇
  4. 1833 雪糕的最大数量(排序)
  5. 《微软云计算Windows Azure开发与部署权威指南》——6.8 AppFabric服务总线的多播服务开发...
  6. 强势来袭!国内首本大型分布式架构笔记浴火新生
  7. java中的值传递和引用传递2原文:http://blog.csdn.net/niuniu20008/article/details/2953785...
  8. 科学计算机计算二进制,科学计算器如何调成二进制计算
  9. Java语音技术之FreeTTS
  10. Google Instant Apps