专栏首页国产程序员shiro 加密登录 密码加盐处理

shiro 加密登录 密码加盐处理

密码加密登录是为了提高系统安全性,即使是管理员查看数据库也得不到密码

使用shiro可以很轻松的完成加密及登录操作

加密工具

此工具用于注册时对密码进行加密

public static final String md5(String password, String salt){
    //加密方式
    String hashAlgorithmName = "MD5";
    //盐:为了即使相同的密码不同的盐加密后的结果也不同
    ByteSource byteSalt = ByteSource.Util.bytes(salt);
    //密码
    Object source = password;
    //加密次数
    int hashIterations = ;
    SimpleHash result = new SimpleHash(hashAlgorithmName, source, byteSalt, hashIterations);
    return result.toString();
}

测试一下

public static void main(String[] args) {
    String password = md5("123456", "WHLH");
    System.out.println(password);
    //加密后的结果
    //3bcbb857c763d1429a24959cb8de2593
}

使用shiro登录

Realm类

@Override
protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authenticationToken) {
    UsernamePasswordToken token=(UsernamePasswordToken) authenticationToken;
    String username = token.getUsername();
    //查询用户信息
    User user=userService.findByUsername(username);
    //取出盐并编码
    ByteSource salt = ByteSource.Util.bytes(user.getSalt());
    return new SimpleAuthenticationInfo(username, user.getPassword(),salt, getName());
}

修改自定义realm配置

加密算法和加密次数要和加密工具参数保持一致

<bean id="myRealm" class="cn.jaffreyen.web.shiro.MyRealm">
    <property name="credentialsMatcher">
        <bean class="org.apache.shiro.authc.credential.HashedCredentialsMatcher">
            <!-- 加密算法 -->
            <property name="hashAlgorithmName" value="MD5"></property>
            <!-- 加密次数 -->
            <property name="hashIterations" value="1024"></property>
        </bean>
    </property>
</bean>

本文分享自微信公众号 - 国产程序员(Monday_lida)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-07-26

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 最简单的Java深搜代码

    林万程
  • 15-STM32物联网开发WIFI(ESP8266)+GPRS(Air202)系统方案微信小程序篇(网页版MQTT,做自己的MQTT调试助手)

    https://www.cnblogs.com/yangfengwu/p/11198572.html

    杨奉武
  • ES6——Generator

    ES6 新引入了 Generator 函数,可以通过 yield 关键字,把函数的执行流挂起,为改变执行流程提供了可能,从而为异步编程提供解决方案。 基本用法

    羊羽shine
  • Unity-UI(UGUI详解)02.1 Canvas组件、Visual组件

    Canvas组件代表UI被放置和渲染的虚拟空间。全部的UI元素必须是带有Canvas组件的Gameobject的子物体。当我们创建一个UI元素从菜单的时候,如果...

    祝你万事顺利
  • RxJava 2.0还没熟悉,RxJava 3.0说来就来了!(基础篇)

    每个Android开发者,都是爱RxJava的,简洁线程切换和多网络请求合并,再配合Retrofit,简直是APP开发的福音。不知不觉,RxJava一路走来,已...

    Android技术干货分享
  • Python后端技术栈(三)--设计模式

    Somewhere, something incredible is waiting to be known.

    小闫同学啊
  • Java 中正则表达式如何匹配竖线(|) , 以及在 Kotlin 中是如何改进的?

    因为 | 在正则表达式中是或的概念,要想匹配就得用转移字符 "|" 但是 "" 又是java的转移字符,要让其在正则中起作用,就得使用: "\|"

    一个会写诗的程序员
  • Python后端技术栈(一)

    Happiness is a way of travel. Not a destination.

    小闫同学啊
  • Python进阶-内置函数大全

    字节数组 字节是计算机的语言,字符串是人类语言,它们之间通过编码表形成一一对应的关系

    小团子
  • 面试官问我:平常如何对你的Java程序进行调优?

    Java 应用性能优化是一个老生常谈的话题,典型的性能问题如页面响应慢、接口超时,服务器负载高、并发数低,数据库频繁死锁等。尤其是在“糙快猛”的互联网开发模式大...

    美的让人心动

扫码关注云+社区

领取腾讯云代金券