登陆的时候对密码进行加密,然后在后台进行解密

进入页面先会通过一个ajax请求,获取一个随机数key,然后通过密码和随机数进行加密,
然而感觉这种加密方法并没有什么卵用,,,只不过增加了点难度而已

<%--Created by IntelliJ IDEA.User: MingDate: Time: 10:54To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %><%String path = request.getContextPath();String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + path + "/";
%><html>
<head><base href="<%=basePath%>"><title>密码加密</title><script type="text/javascript" src="static/jquery/jquery.min.js"></script><script type="text/javascript" src="static/CryptoJS v3.1.2/rollups/aes.js"></script><script type="text/javascript" src="static/CryptoJS v3.1.2/components/mode-ecb-min.js"></script><link rel="stylesheet" href="static/css/login.css"></head>
<body>
<section class="container"><div class="login"><form id="loginForm" method="post" action="index.html"><p><input type="text" name="username" placeholder="用户名"></p><p><input type="password" name="password" placeholder="密码"></p><p class="submit"><input type="submit" value="登录"></p></form></div>
</section>
<script type="text/javascript">var key = null;$.get("sys/user/random", {}, function(result) {// result.data 进入这个页面请求后台,所返回的一个随机数key = CryptoJS.enc.Utf8.parse(result.data);}, "json")$(function(){$("#loginForm").on("submit", function(event){//获取用户名和密码var username = $("input[name=username]").val();var password = $("input[name=password]").val();//发送ajax请求给服务器$.post("sys/user/login",{"user.username" : username,// 调用 Encrypt(word) 对密码进行加密"user.password" : Encrypt(password)},function(data){if(data.success){alert(true)}else{alert(false)}},"json");});})function Encrypt(word){var src = CryptoJS.enc.Utf8.parse(word);var encrypted = CryptoJS.AES.encrypt(src, key, {mode:CryptoJS.mode.ECB,padding: CryptoJS.pad.Pkcs7});return encrypted.toString();}
</script>
</body>
</html>

这是后端代码:

import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.spec.SecretKeySpec;import org.apache.commons.codec.binary.Base64;import sun.misc.BASE64Decoder;/*** @author Ming* @date 2018/3/24 10:55*/
public class TestEncryption{private static final String KEY = "随机数,但是这个数的长度是需要控制的;比如这个随机数通过MD5加密后,那么运行就会报错,太长了";private static final String ALGORITHMSTR = "AES/ECB/PKCS5Padding";public static String base64Encode(byte[] bytes) {return Base64.encodeBase64String(bytes);}public static byte[] base64Decode(String base64Code) throws Exception {return new BASE64Decoder().decodeBuffer(base64Code);}public static byte[] aesEncryptToBytes(String content, String encryptKey) throws Exception {KeyGenerator kgen = KeyGenerator.getInstance("AES");kgen.init(128);Cipher cipher = Cipher.getInstance(ALGORITHMSTR);cipher.init(Cipher.ENCRYPT_MODE, new SecretKeySpec(encryptKey.getBytes(), "AES"));return cipher.doFinal(content.getBytes("utf-8"));}public static String aesEncrypt(String content, String encryptKey) throws Exception {return base64Encode(aesEncryptToBytes(content, encryptKey));}public static String aesDecryptByBytes(byte[] encryptBytes, String decryptKey) throws Exception {KeyGenerator kgen = KeyGenerator.getInstance("AES");kgen.init(128);Cipher cipher = Cipher.getInstance(ALGORITHMSTR);cipher.init(Cipher.DECRYPT_MODE, new SecretKeySpec(decryptKey.getBytes(), "AES"));byte[] decryptBytes = cipher.doFinal(encryptBytes);return new String(decryptBytes);}public static String aesDecrypt(String encryptStr, String decryptKey) throws Exception {return aesDecryptByBytes(base64Decode(encryptStr), decryptKey);}public static void main(String[] args) throws Exception {String content = "Test encryption";  String encrypt = aesEncrypt(content, KEY);System.out.println("加密后:" + encrypt);String decrypt = aesDecrypt(encrypt, KEY);      System.out.println("解密后:" + decrypt);}
}

和前端结合起来用的话就是:


public static void main(String[] args) throws Exception {String content = user.password;  //这里就是前端加密后传过来的密码System.out.println("解密后:" + aesDecrypt(encrypt, KEY));   // 解密,通过加密后的密码和我们上面生成的key进行解密}

链接:https://pan.baidu.com/s/19n7uk9i8fvdrXCeN4iG9xA 密码:1ebz
中的内容:

<script type="text/javascript" src="static/CryptoJS v3.1.2/rollups/aes.js"></script>
<script type="text/javascript" src="static/CryptoJS v3.1.2/components/mode-ecb-min.js"></script>
import org.apache.commons.codec.binary.Base64;

以上代码亲测可用,下载js,以及添加jar 前后端交互就可以了

具体细节及思路

java ---- 登陆加密相关推荐

  1. java登陆密码加密怎么做,Java如何实现密码加密

    在查询时,我们如果要对用户的登录信息进行加密,通常会将其密码进行加密. 1) 可以借助spring框架工具类DigestUtils 2) 也可以使用shiro框架来实现 以上就是两者方式分别使用, 注 ...

  2. Java常见加密使用和分析

    Java常见加密使用和分析 最近项目里碰到很多加解密的场景,使用多种加密的方式,大概整理了一下,一共有一下几种 加密方式 安全性 是否可逆 1 MD5 高 不可逆 2 AES 中 可逆 3 RSA 高 ...

  3. 前端登陆加密和后端解密

    实现了前端对数据进行加密后传输,后端对加密的数据进行解密,然后去数据库对比.因为要解密所以采用对称加密算法.不讨论哪个对称加密算法好,这里采用DES,在实现的过程中发现要找一个js版本的DES加密,并 ...

  4. c rsa java私钥_RSA,JAVA私钥加密,C#公钥解密

    做这个东西在坑里爬了3天才爬出来,记录下供园友参考.C#程序员一枚,项目需要和Java做数据交互,对方甩了段密文和一个CER证书给我,然后我要对其密文进行解密. RSA 非对称加密,对方用私钥加密,我 ...

  5. java源程序加密解决方案(基于Classloader解密)

    源程序加密解决方案 1. 概述: Java源程序的加密,有如下两种: 1使用混淆器对源码进行混淆,降低反编译工具的作用 2基于classloader的自定义加密.解密运行 1.1. 混淆器加密 1.2 ...

  6. java AES 加密和linux解密

    java AES 加密: package app;import static java.nio.charset.StandardCharsets.US_ASCII; import static jav ...

  7. java安全——加密

    [0]README 1)本文文字描述转自 core java volume 2,旨在学习 java安全--加密 的基础知识: 2)java 安全性的第二个重要方面是加密. 3)认证对于代码签名已足够了 ...

  8. java 登陆验证失败_使用Java 8流进行快速失败的验证

    java 登陆验证失败 我已经失去了看过使用快速失败验证代码状态的代码的次数,方法如下: public class PersonValidator {public boolean validate(P ...

  9. java 3des加密_Java使用3DES加密解密的流程 - 3des加密解密详细解释

    Java使用3DES加密解密的流程 ①传入共同约定的密钥(keyBytes)以及算法(Algorithm),来构建SecretKey密钥对象 SecretKey deskey = new Secret ...

最新文章

  1. vue实现表格组件,带分页
  2. java的4种代码块
  3. vue - 父子组件通信之$emit传多个参数
  4. 数组的合并和升序排列_leetcode No.31 下一个排列
  5. Redis 排行榜 相同分数根据时间优先排行
  6. 从零学ELK系列(十一):SpringBoot项目接入ELK超级版(超详细图文教程)
  7. 算法——从旋转字符串到翻转单词
  8. python学习day13 day14 迭代器 生成器
  9. CodeForces 148D-Bag of mice(概率dp)
  10. Flutter初步-第一个电视直播APP
  11. 丁向荣单片机pdf_《单片微机原理与接口技术--基于STC15系列单片机》,丁向荣主编.doc...
  12. 【c语言】两个栈实现一个队列
  13. java随机星星怎么闪_原生js实现星星闪烁的效果
  14. 51单片机实战教程(四 延时程序)
  15. 团队作业7——alpha阶段之事后诸葛亮分析
  16. zuul 之拦截器深入浅出
  17. JSD-2204-API-线程并发-集合-Day08
  18. 个人总结-公司业务逻辑如何进行梳理?
  19. Linux实战技巧--文件系统操作(二)--创建和删除目录(mkdir/rm)
  20. 可以两人同步记录的家庭记账类app有哪些?

热门文章

  1. 计算机二级word考试难点,国家计算机二级考试word难点讲解
  2. FindResource提取PE文件中的资源
  3. Verilog多种方式实现三人表决器
  4. uboot命令集环境变量
  5. Crystal Reports 给我们开了一个玩笑
  6. Linux系统vim命令总结
  7. 基于SE-YOLOV4的变电站断路器分合状态识别算法
  8. 时间的函数Sleep,clock,GetTickCount,QueryPerformanceCounter
  9. linux 时间函数
  10. matlab抛物偏微分方程,抛物型方程差分求解 跪求MATLAB解抛物型偏微分方程的程序...