一文说清:可逆与不可逆加密算法,对称与非对称加密算法-据说BCrypt比MD5要好?
BCrypt、MD5、AES、HS256等加密算法及其用途-加密算法精要
据说BCrypt比MD5要好?什么可逆加密算法,对称加密算法,非对称加密算法、不可逆加密算法!想要掌握吗?看这篇就够了!
导引
开发的过程中,大型系统架构中,多会涉及使用加密算法。很多同学只是会用一些诸如Base64,MD5,数字签名或BCrypt做加密。但是对于为什么要加密,加密方式的特点却不甚清楚。而为什么使用,恰恰比怎么用更加重要!!
还是那句话:一定是有需求,才催生技术!
技术的使用【代码】是简单的,难的如何使用【变现】。
收入+需求+deadline才是攻城狮的第一生产力
基于小伙伴这样的困惑,雄哥在这里做下扫盲,简单梳理下加密算法,重点指出需求场景!带大家一篇文章,拿下加密算法
一、什么是加密算法
加密算法说白了就是一种对数据上锁的function!
数据加密的基本过程:
对原来为明文的文件或数据按某种算法进行处理
加密后的数据不可读,是“密文”
只能在输入相应的密钥之后才能显示出原容
**目标:**通过加密算法的途径来达到,保护数据不被非法人窃取、阅读的目的!
该过程的逆过程为解密。
二、加密算法的种类
可逆加密算法,特点:加密了,还能解密的算法
对称加密
非对称加密
不可逆加密算法,特点:加密了,永远不能解密的算法。直到宇宙的尽头也不行
Base64编码:很多同学觉得base64不是加密算法,但严格来说还真算加密算法!
三、可逆加密算法
解释: 加密后, 密文可以反向解密得到密码原文.
《2020最新Java基础精讲视频教程和学习路线!》
3.1 对称加密
【文件加密和解密使用相同的密钥,即加密密钥也可以用作解密密钥】
解释: 在对称加密算法中,数据发信方将明文和加密密钥一起经过特殊的加密算法处理后,使其变成复杂的加密密文发送出去,收信方收到密文后,若想解读出原文,则需要使用加密时用的密钥以及相同加密算法的逆算法对密文进行解密,才能使其回复成可读明文。在对称加密算法中,使用的密钥只有一个,收发双方都使用这个密钥,这就需要解密方事先知道加密密钥。
优点: 对称加密算法的优点是算法公开、计算量小、加密速度快、加密效率高。
缺点: 没有非对称加密安全.
用途: 一般用于保存用户手机号、身份证等敏感但能解密的信息。
常见的对称加密算法有: AES、DES、3DES、Blowfish、IDEA、RC4、RC5、RC6、HS256
3.2 非对称加密
【两个密钥:公开密钥(publickey)和私有密钥,公有密钥加密,私有密钥解密】
**解释: ** 同时生成两把密钥:私钥和公钥,私钥隐秘保存,公钥可以下发给信任客户端.
加密与解密:
私钥加密,持有私钥或公钥才可以解密
公钥加密,持有私钥才可解密
签名:
私钥签名, 持有公钥进行验证是否被篡改过.
**优点: ** 非对称加密与对称加密相比,其安全性更好;
缺点: 非对称加密的缺点是加密和解密花费时间长、速度慢,只适合对少量数据进行加密。
用途: 一般用于签名和认证。私钥服务器保存, 用来加密, 公钥客户拿着用于对于令牌或者签名的解密或者校验使用.
常见的非对称加密算法有: RSA、DSA(数字签名用)、ECC(移动设备用)、RS256 (采用SHA-256 的 RSA 签名)
四、不可逆加密算法
解释: 一旦加密就不能反向解密得到密码原文.
种类: Hash加密算法, 散列算法, 摘要算法等
**用途:**一般用于效验下载文件正确性,一般在网站上下载文件都能见到;存储用户敏感信息,如密码、 卡号等不可解密的信息。
常见的不可逆加密算法有: MD5、SHA、HMAC
五、Base64编码
Base64是网络上最常见的用于传输8Bit字节代码的编码方式之一。Base64编码可用于在HTTP环境下传递较长的标识信息。采用Base64Base64编码解码具有不可读性,即所编码的数据不会被人用肉眼所直接看到。注意:Base64只是一种编码方式,不算加密方法。
在线编码工具:http://www.jsons.cn/img2base64/
六、BCrypt迅速掌握
在系统架构中,对于用户密码的保护,通常都会进行加密。我们通常对密码进行加密,然后存放在数据库中,在用户进行登录的时候,将其输入的密码进行加密然后与数据库中存放的密文进行比较,以验证用户密码是否正确。 目前,MD5和BCrypt比较流行。相对来说,BCrypt比MD5更安全。
BCrypt 官网www.mindrot.org/projects/jB…
(1)我们从官网下载源码
(2)新建工程,将源码类BCrypt拷贝到工程
(3)新建测试类,main方法中编写代码,实现对密码的加密
String gensalt = BCrypt.gensalt();//这个是盐 29个字符,随机生成
System.out.println(gensalt);
String password = BCrypt.hashpw("雄哥666", gensalt); //根据盐对密码进行加密
System.out.println(password);//加密后的字符串前29位就是盐
(4)新建测试类,main方法中编写代码,实现对密码的校验。BCrypt不支持反运算,只支持密码校验。
boolean checkpw = BCrypt.checkpw("雄哥666", "$2a$10$61ogZY7EXsMDWeVGQpDq3OBF1.phaUu7.xrwLyWFTOu8woE08zMIW");
System.out.println(checkpw);
七、如何在自己的项目中使用BCrypt
7.1 新增用户账户密码加密
新增用户账户信息,使用BCrypt进行密码加密
代码实现
(1)将BCrypt源码拷贝到自己的工程utils包下
(2)修改项目的UserServiceImpl
/*** 增加* @param User*/
@Override
public void add(User user){String password = BCrypt.hashpw(User.getPassword(), BCrypt.gensalt());user.setPassword(password); userMapper.insert(user);
}
7.2 用户登录的密码验证
需求分析
系统用户需要登陆后台系统,需要先输入用户名和密码进行登录,才能进入后台系统。
思路:
用户发送请求,输入用户名和密码
后台系统微服务controller接收参数,验证用户名和密码是否正确,如果正确则返回用户登录成功结果
代码实现
(1)UserService新增方法定义
/*** 登录验证密码* @param User* @return*/boolean login(User user);
(2)UserServiceImpl实现此方法
@Overridepublic boolean login(User user) {//根据登录名查询管理员User u1=new User();u1.setLoginName(User.getLoginName());u1.setStatus("1");User u2 = UserMapper.selectOne(u1);//数据库查询出的对象if(u2==null){return false;}else{//验证密码, Bcrypt为spring的包, 第一个参数为明文密码, 第二个参数为密文密码return BCrypt.checkpw(u1.getPassword(),u2.getPassword());}}
(3)UserController新增方法
/**
- 登录
- @param User
- @return
*/
@PostMapping("/login")
public Result login(@RequestBody User user){
boolean login = UserService.login(user);
if(login){
return new Result();
}else{
return new Result(false,StatusCode.LOGINERROR,“用户名或密码错误”);
}
}
总结
一文说清:可逆与不可逆加密算法,对称与非对称加密算法-据说BCrypt比MD5要好?相关推荐
- Mac和 iOS 下的对称和非对称加密算法的使用
分享在Mac 和 iOS 上使用到的对称和非对称加密算法. 包括RSA,DSA, AES, DES, 3DES 和 blowfish 等等. 因为要实现ssh协议, 所以用到了这些算法, 这些算法在m ...
- android 对称加密和非对称加密,Android开发加密之对称与非对称加密算法使用案例.pdf...
Android开发加密之对称与非对称加密算法使用案例 消息摘要 md5:登录注册, sha1 对称加密 1.des:Data Encryption Standard,数据加密标准 2.aes: ...
- 加密算法(摘要算法,对称、非对称加密算法)
加密目前已经成为计算机安全研究的主要方向,一个密码系统的安全性主要在于密钥的保密性,而不是算法的保密性. 加密系统至少要包括如下四个部分 1 未加密的报文,也叫明文:用M(消息)或P(明文)表示,可以 ...
- JAVA加密解密→术语、密码分类、OSI与TCP/IP安全体系、Base64、消息摘要算法MD/SHA/MAC、对称加密算法DES/AES/PBE、非对称加密算法DH/RSA/EIGamaI
术语 密码分类 OSI与TCP/IP安全体系 JAVA安全 Base64算法 消息摘要算法MD 消息摘要算法MD图解 消息摘要算法SHA 消息摘要算法SHA图解 消息摘要算法MAC 消息摘要算法MAC ...
- 常用加密算法之非对称加密算法
非对称加密算法 非对称加密算法是一种密钥的保密方法. 非对称加密算法需要两个密钥:公开密钥(publickey)和私有密钥(privatekey).公开密钥与私有密钥是一对,如果用公开密钥对数据进行加 ...
- Java 实现 RSA 非对称加密算法-加解密和签名验签
1. 非对称加密算法简介 非对称加密算法又称现代加密算法,是计算机通信安全的基石,保证了加密数据不会被破解.与对称加密算法不同,非对称加密算法需要两个密钥:公开密钥(publickey)和私有密(pr ...
- 深入浅出用户认证鉴权---使用非对称加密算法加密登录
深入浅出用户认证鉴权 使用非对称加密算法加密登录 面临的问题 明文密码登录 MD5/BASE64 加密登录 解决方案 对称加密与非对称加密 对称加密 非对称加密 在登录过程中的使用 使用非对称加密算法 ...
- openssl 非对称加密算法DSA命令详解
1.DSA算法概述 DSA算法是美国的国家标准数字签名算法,它只能用户数字签名,而不能用户数据加密和密钥交换. DSA与RSA的生成方式不同,RSA是使用openssl提供的指令一次性的生成密钥(包括 ...
- 什么是非对称加密?非对称加密概念
什么是非对称加密 对称加密算法在加密和解密时使用的是同一个秘钥:而非对称加密算法需要两个密钥来进行加密和解密,这两个秘钥是公开密钥(public key,简称公钥)和私有密钥(private key, ...
- 【加密技术】对称与非对称加密简介
博主未授权任何人或组织机构转载博主任何原创文章,感谢各位对原创的支持! 博主链接 文章目录 一.加密技术 二.加密算法 三.对称加密算法-私钥算法 3.1几种对称加密算法 3.2 图解对称加密算法 3 ...
最新文章
- sh ndk-build.cmd command not found
- 《Android开发从零开始》——22.数据存储(1)
- 037-PHP如何返回闭包函数实例
- 微软将结束对Windows Vista系统的扩展支持
- LOB字段存放在指定表空间 清理CLOB字段及压缩CLOB空间
- OpenSSL的Heartbleed漏洞原理及简单模拟
- html页面上不断掉星星,html 页面的星星闪烁 特效 背景 (js案例 )
- 基本的信号——矩阵脉冲信号(门函数)
- k8s(kubernetes)部署nacos(3各节点....N各节点均可以)集群
- LABVIEW 虚拟键盘 触摸键盘 中英文输入 支持WIN10 WIN7
- 【笔记】ARM指令系统
- 自制Chrome绿色版
- c语言和python区别,python和c语言的区别是什么
- Python之程序交互
- spring mvc框架、mvc框架模式
- DNS的常用记录详解
- 广告是如何跟踪我们的?所有关于 cookie
- 以太网 以太网帧格式与IP报文分片
- 操作系统与网络实现 之十八(丁)
- Android 源码开发系列(二)Android SIM/USIM
热门文章
- xp怎样修改计算机mac地址,xp系统怎么修改mac地址
- vc程序大小优化最佳方案(转)http://blog.sina.com.cn/s/blog_4c50333c0100gjs3.html
- matlab设计用户界面,MATLAB程序设计教程(11)—MATLAB图形用户界面设计
- pentaho安装配置
- 推荐4个方便实用的软件神器,非常适合程序员
- ios微信多开 服务器,iOS微信双开(多开)
- 三层交换机也不贵:自己动手做三层交换机
- vue—递归组件(vue组件name的作用之一)
- php格式文件怎么改成mp4,dat视频文件如何打开 dat格式文件怎样转换成MP4或其它视频格式...
- WOW 最简单的插件入门,适合不知道怎么创建XML/自己写的插件始终不生效的