美文网首页Spring boot
设计登陆表, 两次MD5加密

设计登陆表, 两次MD5加密

作者: 匆匆岁月 | 来源:发表于2018-08-21 17:30 被阅读468次

    1、数据库设计

    2、明文密码两次MD5处理

    http在网络中是通过明文来进行传输的,如果用户登陆时输入的用户名和密码不做处理。那么如果数据包对别人截取到了,就能过得到数据包中的明文密码。

    两次MD5:

    第一次加密: 将用户输入的明文密码加上固定Salt 之后进行MD5加密,然后在网络中进行传输。当传输到达服务器端的时候,进行第二次加密。

    用户端: PASS = MD5(明文 + 固定Salt)

    第二次加密:第一次加密后的密文和一个随机Salt结合之后,再进行一次MD5加密(这是为了防止数据库被盗,如果只进行一次MD5加密的话,可以通过反查表的方式推算出明文密码)。

    服务端: PASS = MD5(用户输入 + 随机Salt)

    首先,需要在pom.xml中引入MD5相关的依赖:

    <dependency>
      <groupId>commons-codec</groupId>
      <artifactId>commons-codec</artifactId>
    </dependency>
    <dependency>
      <groupId>org.apache.commons</groupId>
      <artifactId>commons-lang3</artifactId>
      <version>3.6</version>
    </dependency>
    

    然后,新建包 com...util,在这个包下面新建类 MD5Util.java:

    package com.*.*.util;
    
    import org.apache.commons.codec.digest.DigestUtils;
    
    public class MD5Util {
        
        public static String md5(String src) {
            return DigestUtils.md5Hex(src);
        }
        
        private static final String salt = "1a2b3c4d";
        
        public static String inputPassToFormPass(String inputPass) {
            String str = ""+salt.charAt(0)+salt.charAt(2) + inputPass +salt.charAt(5) + salt.charAt(4);
            System.out.println(str);
            return md5(str);
        }
        
        public static String formPassToDBPass(String formPass, String salt) {
            String str = ""+salt.charAt(0)+salt.charAt(2) + formPass +salt.charAt(5) + salt.charAt(4);
            return md5(str);
        }
        
        public static String inputPassToDbPass(String inputPass, String saltDB) {
            String formPass = inputPassToFormPass(inputPass);
            String dbPass = formPassToDBPass(formPass, saltDB);
            return dbPass;
        }
        
        public static void main(String[] args) {
            System.out.println(inputPassToFormPass("123456"));//d3b1294a61a07da9b49b6e22b2cbd7f9
    //      System.out.println(formPassToDBPass(inputPassToFormPass("123456"), "1a2b3c4d"));
    //      System.out.println(inputPassToDbPass("123456", "1a2b3c4d"));//b7797cce01b4b131b433b6acf4add449
        }
        
    }
    

    相关文章

      网友评论

        本文标题:设计登陆表, 两次MD5加密

        本文链接:https://www.haomeiwen.com/subject/ewzdiftx.html