saas-export项目-加盐加密

凭证匹配器-普通加密

  • (1)加密
    将明文加密成密文保存,账号保存在数据库中是需要加密码的
  • (2)加密算法
    http://www.ttmd5.com/list.php
  • (3)实现
    》1 对数据库密码进行md5加密
    使用mysql的md5函数对密码进行加密,然后直接修改数据库的用户密码
    》2 在applicationContext-shiro.xml,添加加密认证配置

MD5Utils

public class MD5Utils {
    public static String stringToMD5(String plainText) {//参1 明文
        byte[] secretBytes = null;
        try {
            secretBytes = MessageDigest.getInstance("md5").digest(
                    plainText.getBytes());//对明文的字节进行摘要
        } catch (NoSuchAlgorithmException e) {
            throw new RuntimeException("没有这个md5算法!");
        }
        //16或者32
        String md5code = new BigInteger(1, secretBytes).toString(16);

        //补0 一个字节转两位的16进制
        for (int i = 0; i < 32 - md5code.length(); i++) {
            md5code = "0" + md5code;
        }
        return md5code;
    }
}

MD5UtilsTest

public class MD5UtilsTest {

    @Test
    public void stringToMD5() {
        String result = MD5Utils.stringToMD5("123");
        System.out.println(result);
        //md5(123)= 202cb962ac59075b964b07152d234b70
        //202cb962ac59075b964b07152d234b70
    }

    //shiro也集成常用的加密的算法md5,sha-1

    @Test
    public void test02() {
        Md5Hash md5Hash = new Md5Hash("123");//参1 传入明文
        System.out.println(md5Hash.toString());
        //202cb962ac59075b964b07152d234b70
    }

    @Test
    public void test03() {
        Md5Hash md5Hash = new Md5Hash("123","lw@export.com");//参1 传入明文
        System.out.println(md5Hash.toString());
        //1e99dec7db1120f4604ec224cd90d069
    }
}

Shiro-普通加密

update pe_user set password=md5('123') where email= 'lw@export.com';

  <!--配置一个密码的匹配器-->
    <!--  123 是用户提交过来的, 密码的匹配器 得到密文1,与数据库的密码2-->
    <!--创建凭证匹配器-->
    <bean id="credentialsMatcher"  class="org.apache.shiro.authc.credential.HashedCredentialsMatcher">
        <!--指定加密算法-->
        <property name="hashAlgorithmName" value="md5"/>
    </bean>

    <!--2.2.创建Realm-->
    <bean id="authRealm" class="com.lfy.web.shiro.AuthRealm">
        <property name="credentialsMatcher" ref="credentialsMatcher"/>
    </bean>

凭证匹配器-加盐加密

  • (1)为什么要加盐
    如果只是单纯使用md5或sha1进行加密,容易被人利用"彩虹表"撞库来破解密码,导致密码不安全!这时可以进行加盐加密来解决。
    演示: 加盐
  • (2)shiro加盐加密
    1)编写代码对密码加盐加密
    2)编写自定义凭证匹配器
    3)在applicationContext-shiro.xml,添加自定义凭证匹配器
<!--    使用自己定义的匹配器-->
    <bean id="credentialsMatcher2"  class="com.lfy.web.utils.CustomCredentialsMatcher">
    </bean>

    <!--2.2.创建Realm-->
    <bean id="authRealm" class="com.lfy.web.shiro.AuthRealm">
        <property name="credentialsMatcher" ref="credentialsMatcher2"/>
    </bean>

修复添加用户时对密码加盐加密

  • 添加用户时候,需要对用户输入的密码加密、加盐,这样就可以使用添加的用户登陆了。

UserServiceImpl

@Override
    public void saveUser(User user) {
        String uuid= UUID.randomUUID().toString();
        user.setUserId(uuid);
        //原来保存用户使用的密码是明文,现在需要对它进行加密
        if(user.getPassword() != null){
            Md5Hash md5Hash = new Md5Hash(user.getPassword(), user.getEmail()); //参1 明文  参2 密文
            user.setPassword(md5Hash.toString());
        }
        l.info("saveUser "+user);
        dao.save(user);
    }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值