java ---- 登陆加密

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

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

<%--
  Created by IntelliJ IDEA.
  User: Ming
  Date: 
  Time: 10:54
  To 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中,可以使用不同的方法对登录密码进行MD5加密。一种常见的方法是使用md5算法对密码进行加密。可以在代码中导入相关的库,如`import java.util.Scanner;`和`import java.util.Random;`,然后使用相应的方法对密码进行加密。例如,可以使用以下代码对密码进行MD5加密: ``` Scanner sc = new Scanner(System.in); System.out.println("请输入密码:"); String password = sc.next(); System.out.println("加密后的密码:" + Md5.md5(password)); ``` 此外,还可以对密码进行加盐,将用户的用户名作为盐进行加密。例如: ``` System.out.println("加密加盐后的密码1:" + Md5.md5(username + password)); System.out.println("加密加盐后的密码2:" + Md5.md5(username.charAt(new Random().nextInt(username.length())) + password)); ``` 另一种常见的方法是使用Spring的工具类DigestUtils来对密码进行加密。可以使用`import org.springframework.util.DigestUtils;`导入相关的库,然后使用`DigestUtils.md5DigestAsHex(password.getBytes())`方法对密码进行加密。例如: ``` String password = "1234567"; String md5encryption = DigestUtils.md5DigestAsHex(password.getBytes()); ``` 需要注意的是,在数据库中存储密码时,要确保密码字段的长度足够,以免导致截断错误。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [Java md5加密](https://blog.csdn.net/weixin_65637841/article/details/124889207)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *3* [java 注册登录实现md5加密](https://blog.csdn.net/ttter_/article/details/126961743)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值