山东大学项目实训-地图圈系统-后端开发(6)——密码加密解密

2021年4月19日 6点热度 0条评论 来源: 郑文瑞

密码加密解密

一、springboot+MD5实现注册登录的密码的加密解密

需求:登录和注册的密码涉及到网络安全,对密码的加密能够在一定程度上增加安全性

注册加密实现思路:
1.编写MD5加密的工具类
2.注册时调用工具类,把密码作为参数传进去进行加密,然后存到数据库

1、配置pom.xml

<dependency>
<!-- MD5加密依赖 -->
    <groupId>commons-codec</groupId>
    <artifactId>commons-codec</artifactId>
</dependency>

2、编写MD5加密的工具类

新建package:util
创建java.class:MD5Util
写入代码:

package com.example.demo.util;

import java.security.MessageDigest;

// 用二进制异或运算转化来进行加密解密
public class MD5Util { 
    public static String inputPassToFormPass(String inStr) { 
        MessageDigest md5 = null;
        try { 
            md5 = MessageDigest.getInstance("MD5");
        } catch (Exception e) { 
            System.out.println(e.toString());
            e.printStackTrace();
            return "";
        }
        char[] charArray = inStr.toCharArray();
        byte[] byteArray = new byte[charArray.length];

        for (int i = 0; i < charArray.length; i++) { 
            byteArray[i] = (byte) charArray[i];
        }
        byte[] md5Bytes = md5.digest(byteArray);
        StringBuffer hexValue = new StringBuffer();
        for (int i = 0; i < md5Bytes.length; i++) { 
            int val = ((int) md5Bytes[i]) & 0xff;
            if (val < 16){ 
                hexValue.append("0");
            }
            hexValue.append(Integer.toHexString(val));
        }
        return hexValue.toString();

    }

    /** * 加密解密算法 执行一次加密,两次解密 */
    public static String convertMD5(String inStr) { 

        char[] a = inStr.toCharArray();
        for (int i = 0; i < a.length; i++) { 
            a[i] = (char) (a[i] ^ 't');
        }
        String s = new String(a);
        return s;

    }

    // 测试主函数
    public static void main(String args[]) { 
        String s = "123456";
        System.out.println("原始:" + s);
        System.out.println("MD5后:" + inputPassToFormPass(s));
        System.out.println("加密的:" + convertMD5(s));
        System.out.println("解密的:" + convertMD5(convertMD5(s)));
    }
}

3、编写接口

在UserController中编写注册接口:

@PostMapping("/register")
    public Object register(@RequestBody User user) { 
        List<User> list1;
        int count1;
        list1 = userRepository.findAll();
        count1 = list1.size();
        // 调用DM5类进行加密
        String newPassword = MD5Util.inputPassToFormPass(user.getPassword());
        User user1 = new User();
        // 获取各个字段的数据
        user1.setUsername(user.getUsername());
        user1.setPassword(newPassword);
        user1.setIdentity("0");
        user1.setBirthday(user.getBirthday());
        user1.setIntroduction(user.getIntroduction());
        user1.setProvince(user.getProvince());
        user1.setHead_img(user.getHead_img());
        // 保存数据
        userRepository.save(user1);
        // 成功与否的验证
        User user2;
        user2 = userRepository.findById(user.getUsername()).orElse(null);
        List<User> list2;
        int count2;
        list2 = userRepository.findAll();
        count2 = list2.size();
        if ((count1 + 1 == count2) && (user2 != null)) { 
            JSONObject object = new JSONObject();
            object.put("info", "注册成功");
            object.put("status", 200);
            // 返回一个对象
            return object;
        }
        else { 
            JSONObject object = new JSONObject();
            object.put("info", "注册失败");
            object.put("status", 401);
            // 返回一个对象
            return object;
        }
    }

在UserController中编写登录接口:

@PostMapping("/login")
    public Object login(@RequestBody User user) { 
        User user1 = userRepository.findById(user.getUsername()).orElse(null);
        if (user1 != null) { 
            String token;
            // 获取加密后的密码,然后与数据库中存储的密码进行比较
            String newPassword = MD5Util.inputPassToFormPass(user.getPassword());
            if (user1.getPassword().equals(newPassword)) { 
            // 密码正确
                token = tokenService.getToken(user1);
                JsonConfig jsonConfig = new JsonConfig();
                jsonConfig.registerJsonValueProcessor(Date.class, new JsonDateValueProcessor("yyyy-MM-dd"));
                JSONObject user2 = JSONObject.fromObject(user1, jsonConfig);
                JSONObject object = new JSONObject();
                object.put("user", user2);
                object.put("token", token);
                object.put("status", 200);
                return object;
            }
            else { 
            // 密码不正确
                JSONObject object = new JSONObject();
                object.put("info", "密码错误");
                object.put("status", 401);
                return object;
            }
        }
        else { 
            JSONObject object = new JSONObject();
            object.put("info", "用户名不存在");
            object.put("status", 402);
            return object;
        }
    }

4、测试加密程序

运行MD5Util中的main函数:

可以看到解密后是正确的,说明加密成功!

二、总结

到此关于加密解密的呈现,继续写博客呈现和user表有关的工作。任重道远,继续努力!

    原文作者:郑文瑞
    原文地址: https://blog.csdn.net/Zwr198/article/details/115873399
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系管理员进行删除。