发表于: 2017-11-14 21:30:49

1 669



今天完成的任务


先定一个小目标


做出md5加盐出来,数据库内储存加盐后的账号密码和盐

https://blog.coderzh.com/2016/01/10/a-password-security-design-example/

https://blog.coderzh.com/2016/01/03/security-design/

参考这两篇文章 首先做出MD5(MD5(password)+盐)



本来盐打算随机生成,但是不知道怎么在java程序内的

generateSeed(1);

和获取到mysq上的

generateSeed(1);

一直不一样,百度也找不到原因,我认输,等师兄解答一下吧


---------------------------------------------------------------------------


认输后的产物


public class AppMD5Util {
final static String USERKEY ="123456";
   /**
    * 对字符串md5加密(小写+字母)
    *
    * @param str 传入要加密的字符串
    * @return  MD5加密后的字符串
    */
   public static String MD5(String str) {
try {
// 生成一个MD5加密计算摘要
           MessageDigest md = MessageDigest.getInstance("MD5");//返回实现指定摘要算法的 MessageDigest 对象。
           // 计算md5函数
           md.update(str.getBytes());
           //update使用指定的byte更新摘要
           //getBytes函数是将一个字符串转化为一个字节数组byte[]的方法
           // digest()最后确定返回md5 hash值,返回值为8为字符串。因为md5 hash值是16位的hex值,实际上就是8位的字符
           // BigInteger函数则将8位的字符串转换成16位hex值,用字符串来表示;得到字符串形式的hash值
           return new BigInteger(1, md.digest()).toString(16);
       } catch (Exception e) {
e.printStackTrace();
           return null;
       }
}

public static byte[] getSALT(){
SecureRandom a=new SecureRandom();
       return a.generateSeed(1);
   }


public static String getMD5(String str){
return  MD5(MD5(str)+USERKEY);
   }



简单看一下就知道了

盐用的是固定值,规则在getMD5,这个方法就算写好了


@Test
public void aaaa() {
userMD5 a = new userMD5();

   a.setUserName("1234");
   a.setUserPassword("2234");
   a.setUserName_md5(AppMD5Util.getMD5(a.getUserName()));
   a.setUserPassword_md5(AppMD5Util.getMD5(a.getUserPassword()));
   categoryMapper.userAdd(a);
}


测试类一切正常


虽然这个方法在controller层也能用,不过还是写在service层吧


    public void userAdd( userMD5 a){
a.setUserName_md5(AppMD5Util.getMD5(a.getUserName()));
       a.setUserPassword_md5(AppMD5Util.getMD5(a.getUserPassword()));
       categoryMapper.userAdd(a);}
}


很简单的代码

一目了然


controller接口


也很一目了然



页面一目了然

添加的数据



延伸出几个小问题了

1.怎么判断用户输入的用户名不重复

2.每次调用add页面都会在数据库输入几个空数据,不知道该如何避免



收获


返回列表 返回列表
评论

    分享到