MD5加密算法

  • 此处借用的是JDK内部的加密算法
public class MyPasswordEncoder implements PasswordEncoder {@Overridepublic String encode(CharSequence charSequence) {return privateUserEncoding(charSequence);}//加密验证方法@Overridepublic boolean matches(CharSequence rawPassword, String encodedPassword) {String formPaswd = privateUserEncoding(rawPassword);return Objects.equals(formPaswd, encodedPassword);}//加密方法private String privateUserEncoding(CharSequence rawPassword) {try {// 1.创建 MessageDigest 对象String algorithm = "MD5";MessageDigest messageDigest = MessageDigest.getInstance(algorithm);// 2.获取 rawPassword 的字节数组byte[] input = ((String)rawPassword).getBytes();// 3.加密byte[] output = messageDigest.digest(input);// 4.转换为 16 进制数对应的字符//toUpperCase()存储为大写//  e10adc3949ba59abbe56e057f20f883e//  E10ADC3949BA59ABBE56E057F20F883EString encoded = new BigInteger(1, output).toString(16).toUpperCase();return encoded;} catch (NoSuchAlgorithmException e) {e.printStackTrace();return null;}}
  • main方法测试
 public static void main(String[] args) {//  String s = new MyPasswordEncoder().privateUserEncoding("123456");MyPasswordEncoder encoder = new MyPasswordEncoder();String s = encoder.privateUserEncoding("123456");boolean matches = encoder.matches("123456", s);System.out.println(matches?"一致":"不一致");}
  • 结果输出
  • 盐值加密(BCryptPasswordEncoder)
 private String proEncoder(String input){BCryptPasswordEncoder encoder = new BCryptPasswordEncoder();String encode = encoder.encode(input);return encode;}

测试输入123456
结果—》$2a101010PCALeKZtI9es3gcs3B8xuegaiL7snJ7AzKX0Yq9olzeo505EaM3Z2

  • 验证算法(match)
 private String isSimple(String input){BCryptPasswordEncoder encoder = new BCryptPasswordEncoder();String s= "$2a$10$8NqfLE4OcOA9LwCwJUxA2eVTMT9Srio13Y4hpmKY9ogZUHndXsWAO";return encoder.matches("123456",s)?"一致":"不一致";}
  • 这里以123456为例:验证
public static void main(String[] args) {securityTest securityTest = new securityTest();String simple = securityTest.isSimple("123456");System.out.println(simple);}

spring-security应用

MD5验证

  • 由于MD5没有封装好的验证方法需要自行编译相关类
    MyPasswordEncoder 类
package com.JW.security.service;import com.JW.security.config.Admin;
import jdk.nashorn.internal.ir.RuntimeNode;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpMethod;
import org.springframework.http.HttpRequest;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.authority.SimpleGrantedAuthority;
import org.springframework.security.core.userdetails.User;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.core.userdetails.UsernameNotFoundException;
import org.springframework.stereotype.Component;
import org.springframework.ui.Model;
import org.springframework.ui.ModelMap;import java.net.URI;
import java.util.ArrayList;
import java.util.List;@Component
public class MyUserDetailsService implements UserDetailsService {@Autowiredprivate JdbcTemplate jdbcTemplate;// 总目标:根据表单提交的用户名查询 User 对象,并装配角色、权限等信息@Overridepublic UserDetails loadUserByUsername(// 表单提交的用户名String username) throws UsernameNotFoundException {// 1.从数据库查询 Admin 对象String sql = "SELECT id,login_acct,password,user_name,email FROM t_admin WHERE login_acct=?";List<Admin> list = jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(Admin.class), username);Admin admin = list.get(0);System.out.println(admin.toString());ModelMap modelMap = new ModelMap();modelMap.addAttribute("username",username);System.out.println("username"+username);String username1 = (String) modelMap.get("username");System.out.println("user1"+username1);// 2.给 Admin 设置角色权限信息List<GrantedAuthority> authorities = new ArrayList<>();authorities.add(new SimpleGrantedAuthority("ROLE_ADMIN"));authorities.add(new SimpleGrantedAuthority("ROLE_学徒"));authorities.add(new SimpleGrantedAuthority("UPDATE"));// 3.把 admin 对象和 authorities 封装到 UserDetails 中String userPswd = admin.getPassword();return new User(username, userPswd, authorities);}}
//应用类@Autowiredprivate MyPasswordEncoder myPasswordEncoder;protected void configure(AuthenticationManagerBuilder builder) throws Exception {builder. userDetailsService(myUserDetailsService).passwordEncoder(myPasswordEncoder)
  • 盐值验证(直接注入相关的已经封装好的类即可)
 @Autowiredprivate BCryptPasswordEncoder bCryptPasswordEncoder;@Beanpublic BCryptPasswordEncoder getBCryptPasswordEncoder() {return new BCryptPasswordEncoder();}protected void configure(AuthenticationManagerBuilder builder) throws Exception {builder. userDetailsService(myUserDetailsService).passwordEncoder(getBCryptPasswordEncoder());}

github代码:点击

Spring-Security之加密操作(MD5,盐值加密)相关推荐

  1. shiro—MD5盐值加密

    本例为在idea下shiro集成springMVC.仅有一个认证加密方式(一个realm ) 为什么是MD5盐值加密呢?shiro用密码匹配,密码一样,就ok.如果两个用户的密码一样,则就会造成麻烦. ...

  2. Springboot + Shiro——MD5 盐值加密(配置)

    其实这里所说的盐,简单的说,就是一组安全随机数.它会在特定的时候,加入到密码中(一般来说是加密后的密码).从而使密码变得更有味道(从单一简单化到复杂化),更安全. 如何做到? 1). 在 doGetA ...

  3. java shiro盐值加密_java中spring-shiro实现密码的MD5盐值加密

    看了网上很多教程,都提到有配置spring shiro的密码加密方式,甚至给出了自定义的Class来实现.却很少有通过配置来解决的. 密码的盐值加密方式应该是非常通用的,也可以算是基础吧.按理说spr ...

  4. Shiro(三) 身份认证源码分析与 MD5 盐值加密

    文章目录 1. 身份认证 2. 身份验证的基本流程 3. 身份验证实现 3.1 在 `login.jsp` 添加登录表单 3.2 添加表单提交的 Controller 3.3 完善 Realm 的身份 ...

  5. 【密码加密】【MD5加密】【盐值加密】

    加密方式 MD5加密 盐值加密 实际开发中的应用 MD5加密 MD5加密方式,可以对文件或者值进行读取加密,并且这个密码是不可逆的,也就是不能被破解 利用第三方类库实现加密 //常用的MD5加密 St ...

  6. 登录操作之MD5盐值加密

    在商业项目中,登录操作往往需要对密码进行加密处理,以提高账号的安全程度,实现思路如下(来自于网络): 用户注册(或修改密码)时: 1)用户提供密码(以及其他用户信息): 2)系统为用户随机生成一个Sa ...

  7. java的md5盐值加密_MD5盐值加密

    import java.security.MessageDigest; import java.util.Random; import org.apache.commons.codec.binary. ...

  8. Springboot-14 shiro整合mybati 密码可以用md5盐值加密 更加安全 授权认证登录

    导入pom.xml <?xml version="1.0" encoding="UTF-8"?> <project xmlns="h ...

  9. mysql md5 盐值_md5盐值加密

    using System; using System.Collections.Generic; using System.Linq; using System.Security.Cryptograph ...

最新文章

  1. 【转】mysql多台服务器数据同步
  2. 几种经典的网络服务器架构模型的分析与比较
  3. 2016matlab安装
  4. 域中计算机与用户,域内计算机和用户获取实现vbs代码
  5. 童家旺:如何用分表存储来提高性能
  6. 价值1000毕业设计校园信息发布平台网站源码
  7. VNC实现Windows远程访问Ubuntu 16.04【转载】
  8. java启动参数_Java启动参数的思考
  9. 【系列7】使用Dockerfile创建带mysql5.7的Centos Docker镜像1
  10. Mysql用户访问工作原理
  11. LeetCode 49. Group Anagrams
  12. reflection java_Java Reflection (JAVA反射)
  13. 鲁瑜计算机,程序员计算器.pptx
  14. CATIA二次开发VBA:(一)宏的录制、修改及回放
  15. Ubuntu压缩文件的分卷压缩和解压
  16. 计算机网络之传输层笔记
  17. 2021年美国大学生数学建模竞赛F题思路分析
  18. Ubuntu20.04安装配置tensorflow2深度学习环境
  19. Spring Cloud Feign--常用的配置
  20. 半身证件照如何制作?手把手教你制作办法

热门文章

  1. 使用vue-cli创建uni-app微信小程序流程
  2. 常见的web攻击有哪些?如何防御?
  3. Spring框架 -- 开篇搭建脚手架
  4. Stm32内部温度传感器
  5. js和jQuery调用搜狐IP地址查询接口
  6. Mac系统上老碰到cannot be opened because the developer cannot be verified的问题解决方案
  7. CentOS查看版本号
  8. 【回眸】Linux内核(六)进程是什么?如何复刻查看进程号命令?
  9. JavaScript常用交互方式
  10. 视频行为识别(一):deepmind / kinetics-i3d安装及使用