一、散列算法

散列算法让其保证不可逆,安全。这里举一个例子sh1的摘要算法。上代码

/*** 散列算法* @author Administrator*/
public class HashRsaUtil {/*** 加密方式*/public static final String SHA1="SHA-1";/*** 加密次数*/public static final Integer ITERATIONS=512;/*** sh1摘要算法* @param input 传入的参数* @param salt 干扰素(加盐)* @return*/public static String sha1(String input, String salt){return new SimpleHash(SHA1,input,salt,ITERATIONS).toString();}/*** 随机生成salt* @return 返回一个hex编码的salt*/public static String generateSalt(){SecureRandomNumberGenerator generator = new SecureRandomNumberGenerator();return generator.nextBytes().toHex();}/*** 铭文加密返回密文格式* @param inscription 要加密的铭文* @return 返回salt和密文*/public static Map<String,String> encryptInscription( String inscription){Map<String,String> map = new HashMap<>(16);String salt = generateSalt();String ciphertext = sha1(inscription, salt);map.put("salt",salt);map.put("ciphertext",ciphertext);return map;}

二、Remal使用散列算法

1.修改service模拟数据库出来的数据
/*** 模拟数据库出来的数据* 将123转成密文* @param userName* @return*/@Overridepublic Map<String, String> findPasswordByName(String userName) {return HashRsaUtil.encryptInscription("123");}
2.修改自定义的remal
package com.example.config;import com.example.service.impl.SecurityServiceImpl;
import com.example.untils.HashRsaUtil;
import org.apache.shiro.authc.*;
import org.apache.shiro.authc.credential.HashedCredentialsMatcher;
import org.apache.shiro.authz.AuthorizationInfo;
import org.apache.shiro.realm.AuthorizingRealm;
import org.apache.shiro.subject.PrincipalCollection;
import org.apache.shiro.util.ByteSource;
import org.springframework.util.StringUtils;import java.util.Map;/*** 自定义的realm* 继承授权的接口** @author Administrator*/
public class DefinitionRealm extends AuthorizingRealm {/*** 鉴权** @param principalCollection* @return*/@Overrideprotected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) {return null;}/*** 指定完比较器之后还需要修改比较器,因为当前使用的还是默认的* 比较器,需要改成咱们自己的比较器*/public DefinitionRealm(){//指定密码匹配方式has1//使用Hashed密码比较器//指定算法HashedCredentialsMatcher matcher = new HashedCredentialsMatcher(HashRsaUtil.SHA1);//指定密码迭代次数matcher.setHashIterations(HashRsaUtil.ITERATIONS);//使用父层方法使匹配方式生效,将我们指定的比较器写进去setCredentialsMatcher(matcher);}/*** 认证** @param authenticationToken* @return* @throws AuthenticationException*/@Overrideprotected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authenticationToken) throws AuthenticationException {//获取登录名String principal = (String) authenticationToken.getPrincipal();//然后模拟用登录名去数据库拿到密码SecurityServiceImpl securityService = new SecurityServiceImpl();//获取密文密码Map<String, String> map = securityService.findPasswordByName(principal);//判断拿到的密码是否为空if (StringUtils.isEmpty(map)) {throw new UnknownAccountException("该用户不存在!");}String salt = map.get("salt");String password = map.get("ciphertext");return new SimpleAuthenticationInfo(principal, password, ByteSource.Util.bytes(salt), getName());}
}
3.测试
 @Testpublic void shiroLoginTest() {//导入ini配置创建工厂IniSecurityManagerFactory factory = new IniSecurityManagerFactory("classpath:shiro.ini");//工厂构建安全管理器SecurityManager securityManager = factory.getInstance();//使用工具生效安全管理器SecurityUtils.setSecurityManager(securityManager);//使用工具获取subject的主体Subject subject = SecurityUtils.getSubject();//构建账号密码UsernamePasswordToken passwordToken = new UsernamePasswordToken("zhangSan", "123");//使用subject主体去登录subject.login(passwordToken);//打印登录信息System.out.println("登录结果" + subject.isAuthenticated());}

结果:

散列算法,Remal使用散列算法相关推荐

  1. 散列表、散列函数和散列冲突以及应用场景(一文看懂)

    1.什么是散列表? 散列表(HashTable,也叫哈希表):由数组扩展而来,是根据键(Key)直接访问在内存存储位置的数据结构. 实现原理是:通过散列函数(也叫哈希函数)将元素的键(key)映射为数 ...

  2. jeremy的路径规划学习-1.三维地图定义,散点拟合插值与粒子群算法(matlab实现)

    jeremy的路径规划学习-1.三维地图定义,散点拟合插值与粒子群算法(matlab实现) 本文基于小黎的ally学习资料实现,感谢该博主的无私奉献 三维地图与二维地图的差别 1.二维无高度信息,多用 ...

  3. java 散列集_java数据结构之散列集HashSet与散列表Hashtable

    java数据结构之散列集HashSet与散列表Hashtable 1.散列集HashSet HashSet类在java.util包中 A.构造方法:HashSet() B.常用方法 public bo ...

  4. 分类算法列一下有多少种?应用场景?分类算法介绍、常见分类算法优缺点、如何选择分类算法、分类算法评估

    分类算法 分类算法介绍 概念 分类算法 常见分类算法 NBS LR SVM算法 ID3算法 C4.5 算法 C5.0算法 KNN 算法 ANN 算法 选择分类算法 分类算法性能评估 分类算法介绍 概念 ...

  5. 数据结构与算法之美-哈希算法

    哈希算法的定义和原理 将任意长度的二进制串映射为固定长度的二进制串. 这个映射的规则就是哈希算法,而通过原始数据映射之后得到的二进制串就是哈希值. 设计一个优秀的哈希算法需要满足: 从哈希值不能反向推 ...

  6. 相似图像搜索的哈希算法思想及实现(差值哈希算法和均值哈希算法)

    图像相似度比较哈希算法: 什么是哈希(Hash)? • 散列函数(或散列算法,又称哈希函数,英语:Hash Function)是一种从任何一种数据中创建小 的数字"指纹"的方法.散 ...

  7. 重学算法第三期|数据结构与算法001

    目录 强烈推荐一个数据结构可视化工具:https://www.cs.usfca.edu/~galles/visualization/Algorithms.html,点击B+树即可模拟B+树的动态插入过 ...

  8. MD5算法之C#程序 MD5算法描述

    MD5算法之C#程序 MD5算法描述 MD5算法描述 当我要写一个MD5算法的程序时,发现中英文的语言描述都有一些不确切的地方,某些个细节 讲得不清楚,或者说很费解.最后不得不拿出C语言的源程序来调试 ...

  9. scikit-learn学习之K-means聚类算法与 Mini Batch K-Means算法

    ====================================================================== 本系列博客主要参考 Scikit-Learn 官方网站上的 ...

最新文章

  1. 一卡通变“一脸通” 人脸识别更新校园考勤方式
  2. 使用驱动器f:中的光盘之前需要将其格式化_硬盘无法使用,用DiskPart进行分区和格式化,非常简单...
  3. ipvsadm命令及lvs-nat类型web服务器集群
  4. SurfaceGo配置轻量级LaTeX写作环境(MiKTeX)
  5. 【C语言】找到兼职了心情紧张!
  6. input美化上传按钮美化
  7. 弱人工智能才是未来AI研究的主流方向
  8. jdbc批量执行SQL insert 操作
  9. 睡眠监测微信小程序源码
  10. cba比赛比分预测_昨日预测CBA一红一黑,今日继续给大家带来CBA全部比赛4场
  11. windows环境下C++实现的多种目录监控和优劣解析
  12. 2021/1/26-每日三题第33弹:皮皮虾,我们走 !你知道什么是面向对象编程和面向过程编程吗 ???
  13. c语言课程设计(图书馆管理系统)
  14. 福州师范大学计算机专业导师简介,黄欣沂_福建师范大学研究生导师信息
  15. E+H悬浮物测量传感器CUS51D-AAD1A3
  16. 用Allegro导出DXF/DWG格式文件
  17. 解除隐藏已购项目_从AppStore的已购项目中隐藏已经购买的APP
  18. 【学习OpenCV4】案例1:Windows OpenCV C++语言开发环境搭建
  19. CAD属性编辑操作——快速选择
  20. Ubuntu 16.04通过命令行连接Wi-Fi

热门文章

  1. [POJ2888] Magic Bracelet
  2. HDU1269 迷宫城堡(模板题)
  3. 模板:杜教筛(莫比乌斯反演、数论)
  4. P3242 [HNOI2015] 接水果(整体二分、扫描线、dfs序)
  5. 树哈希判断同构无根同构问题转有根同构问题
  6. CF388D-Fox and Perfect Sets【dp,线性基】
  7. jzoj6804-NOIP2020.9.26模拟jerry【dp】
  8. P3698-[CQOI2017]小Q的棋盘【树形dp】
  9. 【贪心】国王游戏(ybtoj 贪心-1-4)
  10. 【二分】Best Cow Fences(poj 2018)