用户在使用软件时所提交的密码,不应该被记录下来,如果将用户的密码记录,这是不安全的做法!

当用户提交注册信息时,密码必须被记录下来,为了保障密码安全,必须对用户提交的原始密码进行加密处理!

用户提交的原始密码通常可以称之为“明文密码”,或“密码的原文”,经过编码处理后,得到的结果通常是不能被直接识别的另一个数据,称之为“密文”。

当尝试对密码进行加密处理时,应该使用成熟的、已有的算法!

需要注意:当需要将密码进行加密并存储下来时(例如存储到数据库中),不可以使用“加密算法”!因为所有的“加密算法”都是可以逆向运算的,即根据密文可以逆向运算得到原文,这种算法通常是用于保障传输过程的安全,并不用于保障存储下来的数据的不可逆向运算!

对于将要存储下来的密码,一般使用“消息摘要算法”进行处理,这类算法是不可以逆向运算的!

消息摘要算法有以下特点

  • 使用同样的算法,使用同样的消息,运算得到的摘要必然相同

  • 使用同样的算法,无论使用什么消息,运算得到的摘要的长度是相同的

  • 使用同样的算法,使用不同的消息,运算得到的摘要极大概率不会相同

典型的消息摘要算法有:

  • SHA家族(Secure Hash Algorithm)

  • SHA-1(160位算法)

  • SHA-256(256位算法)

  • SHA-384(384位算法)

  • SHA-512(512位算法)

  • MD系列(Message Digest)

  • MD2(128位算法)

  • MD4(128位算法)

  • MD5(128位算法)

在Spring Boot项目中,依赖项中已经包含了DigestUtils工具类,此工具类有便利的、使用MD5算法的API:

@Test
void encode()
{String rawPassword = "123456";String encodedPassword = DigestUtils.md5DigestAsHex(rawPassword.getBytes());System.out.println("原文:" + rawPassword);System.out.println("密文:" + encodedPassword);
}

由于消息摘要算法中“消息”和“摘要”是固定对应的(相同的消息,摘要必然相同),在网络上也有许多平台可以实现消息摘要的“破解”。

这些“破解”平台能够收录的消息与摘要的对应关系是非常有限的,所以,在设计软件时,应该要求用户(软件的使用者)使用安全强度更高的密码!

另外,还应该对密码进行“加盐”处理,即在编码过程中,使用“盐值”。

盐值是一个自行指定值的字符串,应该被用于编码过程,但具体使用方式并没有统一的规定。

使用盐的示例:

@Test
void encode2() {
String salt = "3r3HDSLQrAqweHKFwyJfDtt4876oruiSJF4glui"; // 盐值
String rawPassword = "123456";
String encodedPassword = DigestUtils.md5DigestAsHex((rawPassword + salt).getBytes());
System.out.println("原文:" + rawPassword);
System.out.println("密文:" + encodedPassword);
}

密码加密(MD5)原则相关推荐

  1. php 挂马 密码123456,admin密码-常用密码加密md5值,123456,admin,admin888

    一 : 常用密码加密md5值,123456,admin,admin888 123456这个经md5算法加密之后是多少? 16位:49ba59abbe56e057 32位:e10adc3949ba59a ...

  2. 常用密码加密md5值,123456,admin,admin888

    123456这个经md5算法加密之后是多少? 16位:49ba59abbe56e057 32位:e10adc3949ba59abbe56e057f20f883e admin这个经md5算法加密之后是多 ...

  3. 用户注册进行密码加密MD5

    工具类util package com.cbb.util; import org.apache.commons.codec.digest.DigestUtils; import org.springf ...

  4. 对于AES和RSA算法的结合使用以及MD5加盐注册登录时的密码加密

    RSA和AES结合使用 接上篇的RSA和AES算法加密之后,AES对称算法对数据量大的加密比较快,而RSA公私钥加密的话会影响加密效率,但是AES的加密与解密的密钥是一致的,导致密钥不能外泄,密钥在网 ...

  5. 对用户密码进行md5加密的代码实现

    对密码进行md5加密,然后插入到数据库代码实现:

  6. C#中使用MD5对用户密码加密与解密

    C#中常涉及到对用户密码的加密于解密的算法,其中使用MD5加密是最常见的的实现方式.本文总结了通用的算法并结合了自己的一点小经验,分享给大家. 一.使用16位.32位.64位MD5方法对用户名加密 1 ...

  7. C#对用户密码使用MD5加密与解密

    C#中常涉及到对用户密码的加密于解密的算法,其中使用MD5加密是最常见的的实现方式.本文总结了通用的算法并结合了自己的一点小经验,分享给大家. 一.使用16位.32位.64位MD5方法对用户名加密 1 ...

  8. MD5之C#密码加密-备忘录

    MD5算法说明:  加密算法都是对字节数组或流进行加密的.MD5的算法则是对原始的字节数组随机(有算法的随机)抽取几个字节,经过运算后返回新的字节(加密以后的字节).它不 仅可以对字符串进行加密,也可 ...

  9. 简单的MD5密码加密和解密方法

    MD5的算法是不可逆的,MD5被广泛用于密码验证和消息体完整性验证. 下面的例子用到了密码加密和登陆时的解密的基本方法.当然这样很容易被暴力破解,可以做其他改进,如先设计一个足够复杂的密码,然后将他的 ...

最新文章

  1. I/O端口地址分配表(转)
  2. Python应用实战案例-pyspark库从安装到实战保姆级讲解
  3. 【杂谈】裸辞一年后,分享一下我的心态
  4. llvm编译器实战教程第二版_LLVM编译器实战教程
  5. 【项目介绍】FTP服务器
  6. 让height: 100%生效
  7. Kafka—配置SASL/PLAIN认证客户端及常用操作命令
  8. 服务器sxs文件通用的吗,win10x sources sxs文件有什么作用
  9. HDFS 读取、写入、遍历文件夹获取文件全路径、append
  10. 正态总体样本的分布定理
  11. MDK 编译错误和警告 使用时遇到的小问题
  12. JVM初识之垃圾回收机制(GC)
  13. C++ Json解析库Jsoncpp下载+编译+使用
  14. 很多的计算机英语词汇是通过,计算机英语词汇隐喻分析
  15. dell emc isilon环境 Windows共享文件下生成.snapshot无法删除
  16. 合成文字识别需要的训练竖排文字数据集
  17. Allegro PCB多层板中负片热风焊盘的制作以及flash的添加
  18. 2020-01-04
  19. Linux-Samba文件共享服务
  20. 22个关于ES6的最新面试题汇总整理

热门文章

  1. Android 创建桌面快捷方式的方法
  2. vueCLI脚手架的介绍和安装
  3. 【Python|Kaggle】机器学习系列之Pandas基础练习题(四)
  4. ssm+jsp计算机毕业设计中药材自学网97023(程序+LW+源码+远程部署)
  5. 寻路算法--深度寻路算法
  6. 使用STM32标准库构建VSCode+gcc+openOCD开发STM32
  7. H5 CSS 滚动条隐藏 (横向/纵向)
  8. 用 Java 实现“人像动漫化”特效
  9. NIC Teaming on CentOS 7 with nmtui
  10. 5大自动化测试的 Python 框架