数据库设计

1、数据库设计

CREATE TABLE `miaosha_user` (
  `id` bigint(20) NOT NULL COMMENT '用户ID,手机号码',
  `nickname` varchar(255) NOT NULL,
  `password` varchar(32) DEFAULT NULL COMMENT 'MD5(MD5(pass明文+固定salt) + salt)',
  `salt` varchar(10) DEFAULT NULL,
  `head` varchar(128) DEFAULT NULL COMMENT '头像,云存储的ID',
  `register_date` datetime DEFAULT NULL COMMENT '注册时间',
  `last_login_date` datetime DEFAULT NULL COMMENT '上次登录时间',
  `login_count` int(11) DEFAULT '0' COMMENT '登录次数',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4

2、使用加密算法(MD5)对密码分两次加密入库

(1)client端: PassWord = MD5(明文 + 固定Salt)
防止传输过程中,cookie被攻击者截取获得明文密码。
(2)server端: PassWord = MD5(用户输入 + 随机Salt)
若数据库被盗,攻击者可能会通过反查,获取到密码,所以需要二次加密。

    private static final String salt = "q4w5e8r6d1a3";

    public static String md5(String src){
        return DigestUtils.md5Hex(src);
    }

    /**
     * 第一层md5加密
     * @param inputPass
     * @return
     */
    public static String inputPassToFormPass(String inputPass){
        String str = "" + salt.charAt(0) + salt.charAt(2) + inputPass + salt.charAt(5) + salt.charAt(4);
        return md5(str);
    }

    /**
     * 二次加密
     * @param formPass
     * @param salt
     * @return
     */
    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 input, String saltDb){
        String formPass = inputPassToFormPass(input);
        String dbPass = formPassToDBPass(formPass,saltDb);
        return dbPass;
    }

3、JSR303参数校验+ 全局异常处理器

4、分布式Session

posted @ 2023-05-09 14:55  亦痕  阅读(21)  评论(0编辑  收藏  举报
//点击特效
//为右下角推荐推荐区域添加关注按钮 // 生成目录索引列表 //返回顶部