解决方案:加盐加密算法BCrypt


关键词

  • 对称加密(单钥),非对称加密(公私钥),数字签名
  • BCrypt加密(加盐)

一、对称加密算法

(1)定义:
采用单钥密码系统的加密方法,同一个密钥可以同时用作信息的加密和解密,这种加密方法称为对称加密,也称为单密钥加密

(2)要素:
原文、秘钥、算法

秘钥:在密码学中是一个定长的字符串、需要根据加密算法确定其长度

(3)工作过程:
通常使用的是相对较小的密钥,一般小于256 bit。因为密钥越大,加密越强,但加密与解密的过程越慢。如果你只用1 bit来做这个密钥,那黑客们可以先试着用0来解密,不行的话就再用1解;但如果你的密钥有1 MB大,黑客们可能永远也无法破解,但加密和解密的过程要花费很长的时间。密钥的大小既要照顾到安全性,也要照顾到效率。

加密:明文 + 密钥 -> 密文
解密:密文 + 密钥 -> 明文

(4)算法
DES(Data Encryption Standard):数据加密标准(使用比较少,加密强度不够,能够暴力破解)

3DES:原理和DES几乎是一样的,只是使用3个密钥,对相同的数据执行三次加密,增强加密强度。(缺点:要维护3个密钥,大大增加了维护成本)

AES(Advanced Encryption Standard):高级加密标准,用来替代原先的DES,目前美国国家安全局使用的,苹果的钥匙串访问采用的就AES加密。是现在公认的最安全的加密方式,是对称密钥加密中最流行的算法。

AES128和AES256主要区别是密钥长度不同(分别是128bits,256bits)、加密处理轮数不同(分别是10轮,14轮),后者强度高于前者。

(5)特点
优点:算法公开、计算量小、加密速度快、加密效率高。

缺点:相对来说不算特别安全,只有一把钥匙,密文如果被拦截,且密钥也被劫持,那么,信息很容易被破译。

二、非对称加密算法

(1)简介:
非对称加密是计算机通信安全的基石,保证了加密数据不会被破解。

非对称加密算法需要两个密钥:公开密钥(public key)私有密钥(private key)

公开密钥和私有密钥是一对

(2)特点:
如果用公开密钥对数据进行加密,只有用对应的私有密钥才能解密。

如果用私有密钥对数据进行加密,只有用对应的公开密钥才能解密。

由于其算法复杂,而使得加密、解密速度没有对称加密解密的速度快。有两种密钥,其中一个是公开的,这样就可以不需要像对称密码那样传输对方的密钥了,这样安全性就大了很多。

(3)常用算法:
RSA、DSA、ECDSA

(4)推演 - 非对称加密
公钥加密:f1 ( publicKey,data ) = X

私钥解密:f2 ( privateKey,X ) = data

私钥加密:f3 ( privateKey,data) = X

公钥解密:f1 ( publicKey,X) = data

私钥保存在服务端,公钥保存在客户端,私钥永远不对外暴露

三、数字签名

(1)数字签名有两种功能:
能确定消息确实是由发送方签名并发出来的,因为别人假冒不了发送方的签名。

数字签名能确定消息的完整性,证明数据是否未被篡改过

(2)数字签名如何生成
将要发送的数据先用Hash算法(摘要算法、散列算法)生成消息摘要,然后用发送者的私钥加密生成数字签名,与原文一起传送给接收者

接下来就是接收者校验数字签名的流程了。

(3)校验数字签名流程
接收者只有用发送者的公钥才能解密被加密的摘要信息,然后用HASH函数对收到的原文产生一个摘要信息,与上一步得到的摘要信息对比。如果相同,则说明收到的信息是完整的,在传输过程中没有被修改,否则说明信息被修改过,因此数字签名能够验证信息的完整性。

假设消息传递在客户端、服务器之间发生。
服务器将消息连同数字签名一起发送给客户端
客户端接收到消息后,通过校验数字签名,就可以验证接收到的消息就是服务器发送的。

四、BCrypt加密

通常对密码进行加密,然后存放在数据库中,在用户进行登录的时候,将其输入的密码进行加密然后与数据库中存放的密文进行比较,以验证用户密码是否正确。 目前,MD5和BCrypt比较流行。相对来说,BCrypt比MD5更安全。

BCrypt 官网:http://www.mindrot.org/projects/jBCrypt/

(1)我们从官网下载源码
(2)新建工程,将源码类BCrypt拷贝到工程
(3)新建测试类,main方法中编写代码,实现对密码的加密

String gensalt = BCrypt.gensalt();//这个是盐 29个字符,随机生成
System.out.println(gensalt);
String password = BCrypt.hashpw("123456", gensalt);  //根据盐对密码进行加密
System.out.println(password);//加密后的字符串前29位就是盐

(4)新建测试类,main方法中编写代码,实现对密码的校验。BCrypt不支持反运算,只支持密码校验

boolean checkpw = BCrypt.checkpw("123456",  "$2a$10$61ogZY7EXsMDWeVGQpDq3OBF1.phaUu7.xrwLyWFTOu8woE08zMIW");
System.out.println(checkpw);

解决方案:加盐加密算法BCrypt相关推荐

  1. 浅谈MD5加密算法中的加盐值(SALT)

    我们知道,如果直接对密码进行散列,那么***可以对通过获得这个密码散列值,然后通过查散列值字典(例如MD5密码破解网站),得到某用户的密码. 加Salt可以一定程度上解决这一问题.所谓加Salt方法, ...

  2. MD5加密算法中的加盐值 ,和彩虹表攻击 防止彩虹表撞库

    一.什么是彩虹表? 彩虹表(Rainbow Tables)就是一个庞大的.针对各种可能的字母组合预先计算好的哈希值的集合,不一定是针对MD5算法的,各种算法的都有,有了它可以快速的破解各类密码.越是复 ...

  3. 加盐密码哈希:如何正确使用 (密码加密的经典文章)

    https://crackstation.net/hashing-security.htm http://blog.jobbole.com/61872/ 本文由 伯乐在线 - 蒋生武 翻译.未经许可, ...

  4. 加盐密码哈希:如何正确使用 (转)

    转自http://blog.jobbole.com/61872/#java 转自http://blog.csdn.net/coslay/article/details/50382252#t14 如果你 ...

  5. [转]加盐hash保存密码的正确方式

    本文转自:http://drops.wooyun.org/papers/1066 0x00 背景 大多数的web开发者都会遇到设计用户账号系统的需求.账号系统最重要的一个方面就是如何保护用户的密码.一 ...

  6. 加盐哈希-Salted Password Hashing

    (译文:http://blog.jobbole.com/61872/ (中文) 原文:https://crackstation.net/hashing-security.htm (英文) 个人推荐英文 ...

  7. 关于Shiro使用密码加密加盐之后序列化失败的问题(十四)

    原文:https://blog.csdn.net/qq_34021712/article/details/84567437 shiro使用密码加盐之后,序列化失败 ERROR Failed to se ...

  8. 加盐密码哈希:如何正确使用

    如果你是Web开发者,你很可能需要开发一个用户账户系统.这个系统最重要的方面,就是怎样保护用户的密码.存放帐号的数据库经常成为入侵的目标,所以你必须做点什么来保护密码,以防网站被攻破时发生危险.最好的 ...

  9. 加盐hash保存密码的正确方式

    0x00 背景 大多数的web开发者都会遇到设计用户账号系统的需求.账号系统最重要的一个方面就是如何保护用户的密码.一些大公司的用户数据库泄露事件也时有发生,所以我们必须采取一些措施来保护用户的密码, ...

最新文章

  1. 设计一个带有getmin功能的栈,保证时间复杂度在O(1)
  2. 那些永不消逝的进程 (转)
  3. (论坛答疑点滴)怎么在datagrid翻页的时候确认?
  4. undefined reference to `__errno‘ 解决办法
  5. Spring bean三种创建方式
  6. [react-router] React-Router怎么获取URL的参数?
  7. 简单易用的开源ORM框架SqlSugar v5.0.0.19源码
  8. 全新安装2008操作系统和2008 server core核心安装
  9. Java web后台插入数据库中文乱码问题解决
  10. 从PHP5到PHP7的注意事项
  11. OpenCore引导配置说明第十二版-基于OpenCore-0.6.5正式版
  12. python人流热力图_高德地图热力图插件实现人流量监控,如何实现人流数据实时刷新...
  13. 工具(6): 开发神器
  14. 异常:Mapper method 'com.***.delByNumber' has an unsupported return type: class java.lang.String
  15. ue4人物动作_ue4人物动作资源Resource Gathering Animation418
  16. mac 完全卸载android,Mac彻底卸载Android Studio
  17. Easyrecovery如何正确激活
  18. 谁能教教我怎么学单片机,先学什么,怎么入门?
  19. C++设计模式 | 四种创建型模式——简单工厂模式、工厂方法模式、抽象工厂模式、单例模式...
  20. [篇五章四]-关于 Windows 10 没有桌面图标如何调出来

热门文章

  1. Linux环境中堆栈和堆相关内存损坏的基本原理和调试方法介绍
  2. nginx日志定期归档脚本
  3. linux访问windows共享目录开机自动挂载
  4. 定制CentOS 5.6精简的自动安装版及心得
  5. 让人欲罢不能的量子学
  6. 部分 DNS 查询因闰秒 bug 报错
  7. NAND Flash【转】
  8. 同源策略——浏览器安全卫士
  9. 黑马程序员-java-高新技术中《九》
  10. 美图技术博客之地理空间距离计算优化