用户登录对密码进行加密
来源:互联网 发布:淘宝客短网址生成器 编辑:程序博客网 时间:2024/06/06 02:44
离开上家公司后才发现上家公司的网站 用户登录 对密码是没有任何加密的形式,自己整理了一下对密码加密的方法 如下:
不加密:
我们使用网络探测器能轻易的获取用户的用户名密码,如果这些信息被不发份子获得,后果可想而知;
这里我们可以看到 密码是以明文的方式 被网络探测器 嗅到
现对密码进行加密,如果对用户也不希望明文显示也可以进行加密:代码如下:
java 后台代码:
生成公钥方法:
/** * 生成公钥 * @return * @throws Exception */@ClearInterceptor(ClearLayer.ALL) public void Rdspwd() throws Exception{ HttpServletResponse response = getResponse();; PrintWriter writer = response.getWriter(); String publicKey = RSAUtils.generateBase64PublicKey(); writer.write(publicKey); renderNull(); }页面代码:我们在页面一加载的时候就Ajax请求生成公钥的方法
需要先在Javascript 中声明 公钥变量
//获取public key var publicKey = null;
<button type="button" id="login-btn" class="width-35 btn btn-sm btn-primary" onclick="doLogin()"><i class="ace-icon fa fa-key"></i><span class="bigger-110" >登录</span></button>
function getPublicKey(dologin){$.ajax({url: "/login/Rdspwd", type: "post", dataType: "text", success: function(data) { if(data) publicKey = data; if(dologin==1){ if(publicKey==null){ $("#msg").html("获取publicKey失败,请联系管理员!"); $("#login-btn").removeAttr("disabled"); }else{ doLogin(1); } } }});}
获取用户名和密码:
var ustring = $.trim($("#ustring").val());var pstring = $.trim($("#pstring").val());
然后根据公钥进行私钥加密:
//进行加密 var encrypt = new JSEncrypt(); if(publicKey != null){ encrypt.setPublicKey(publicKey); var password = encrypt.encrypt(pstring); var username = encrypt.encrypt(ustring); //提交之前,检查是否已经加密。假设用户的密码不超过20位,加密后的密码不小于20位 if(password.length < 20) { //加密失败提示 alert("登录失败,请稍后重试..."); }else{ $.ajax({url: "${contextPath}/dologin", type: "post", data: {"usname": username,"pwd": password,"vcstring": vcstring}, dataType: "json", }}
后台获取到加密后的用户名和密码后进行解密:
//解密帐号username = RSAUtils.decryptBase64(username);//解密密码password = RSAUtils.decryptBase64(password);RSAUtils 类:
public class RSAUtils { //KeyPair is a simple holder for a key pair. private static final KeyPair keyPair = initKey(); /** * 初始化方法,产生key pair,提供provider和random * @return KeyPair instance */ private static KeyPair initKey() { try { //添加provider Provider provider = new org.bouncycastle.jce.provider.BouncyCastleProvider(); Security.addProvider(provider); //产生用于安全加密的随机数 SecureRandom random = new SecureRandom(); KeyPairGenerator generator = KeyPairGenerator.getInstance("RSA", provider); generator.initialize(1024, random); return generator.generateKeyPair(); } catch(Exception e) { throw new RuntimeException(e); } } /** * 产生public key * @return public key字符串 */ public static String generateBase64PublicKey() { PublicKey publicKey = (RSAPublicKey)keyPair.getPublic(); //encodeBase64(): Encodes binary data using the base64 //algorithm but does not chunk the output. //getEncoded():返回key的原始编码形式 return new String(Base64.encodeBase64(publicKey.getEncoded())); } /** * 解密数据 * @param string 需要解密的字符串 * @return 破解之后的字符串 */ public static String decryptBase64(String string) { //decodeBase64():将Base64数据解码为"八位字节”数据 return new String(decrypt(Base64.decodeBase64(string.getBytes()))); } private static byte[] decrypt(byte[] byteArray) { try { Provider provider = new org.bouncycastle.jce.provider.BouncyCastleProvider(); Security.addProvider(provider); //Cipher: 提供加密和解密功能的实例 //transformation: "algorithm/mode/padding" Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding", provider); PrivateKey privateKey = keyPair.getPrivate(); //初始化 cipher.init(Cipher.DECRYPT_MODE, privateKey); //doFinal(): 加密或者解密数据 byte[] plainText = cipher.doFinal(byteArray); return plainText; } catch(Exception e) { throw new RuntimeException(e); } }}
好了。 这样用户登录的 加密 和解密就完成了。
前台页面加载时调用生成公钥方法 生成公钥, 然用户点击登录时获取用户输入的用户名、密码,根据之前生成的公钥 进行私钥加密,传入后台的数据是已经加过密的数据, 然后我们在后台在进行解密 ,得到用户输入的原始密码, 后面的就可以根据自己的业务需求进行处理。
0 0
- 用户登录对密码进行加密
- 对用户的密码进行加密
- iOS 与Java 配合在用户登录的时候对用户名和密码进行RSA加密
- 单点登录之cas4.2.7服务端数据库配置(读数据库验证用户并对密码进行加密)
- 单点登录之cas4.2.7服务端数据库配置(读数据库验证用户并对密码进行加密)
- 对用户输入的密码进行MD5加密
- php用户注册对密码进行MD5加密
- MessageDigest对密码进行加密
- 对密码进行加密操作
- 对密码进行加密操作 .
- java对密码进行加密
- 用户登录提交前,密码加密传输
- MD5 加密登录用户名称和密码
- C#:使用MD5对密码进行加密!
- .net对密码进行MD5加密
- 对密码字段进行加密(MD5)
- 使用MD5对密码进行加密
- 使用MD5对密码进行加密
- leetcode-15. 3Sum
- 【Dubbo实战】 Dubbo+Zookeeper+Spring整合应用篇-Dubbo基于Zookeeper实现分布式服务(二)
- 文章标题
- WebSocket 简要概述
- java___boolean型标记双色球
- 用户登录对密码进行加密
- Jacobi迭代法与Gauss-Seidel迭代法
- 20170509
- git pull更新错误解决办法
- Qml关于注册c++对象
- 使用java websocket简单实现即时聊天
- java__do while 阶乘
- h.264 aac librtmp推流应用
- 【Java】如何检测、替换4个字节的utf-8编码(此范围编码包含emoji表情)