网站首页 > 技术文章 正文
您好,我是湘王,这是我的头条号「湘王说」,欢迎您来,欢迎您再来~
除了对称加密算法和非对称加密算法,再就是最后的一种加密算法了:不可逆加密算法。
对称加密算法和非对称加密算法在处理明文的过程中需要使用密钥,而不可逆加密算法就不需要,因为正如其名,密文都不能再转变成明文了,还要密钥干嘛呢。
不可逆加密算法的验证和其他加密方法不同,它的「解密」其实就是加密:也就是把明文再按加密算法加密一次,如果加密后的结果和密文相等,就认为解密成功(MD5的加密验证就是这么干的)。
常用的不可逆加密算法包括两种:
1、MD5
2、SHA
MD5全称Message-Digest Algorithm 5(消息摘要算法5),是一种Hash散列算法,MD5将任意长度的字符串变换成一个128位的大整数。理论上它是不可能被破解的,但实际上已经被清华大学和山东大学的双聘教授王小云破解了,不仅如此,王教授还顺带破解了和MD5一道,被称为HAVAL-128、 MD4和RIPEMD等国际著名密码算法,由美国国家标准技术研究院与美国国家安全局设计专门制定密码算法SHA-1也被她破解了。
MD5的使用极其广泛,大多数互联网应用中的用户密码加密就是用的MD5。
SHA全称安全散列算法(Secure Hash Algorithm),是一系列加密算法的简称,有SHA-1/2/3/224/256/384/512这一系列类别,较为常用的是SHA-2、SHA-256,早期版本的MongoDB的加密算法默认就是SHA-1,现在已经换成了SHA-2。
SHA和MD5一样,也属于Hash散列算法,将任意长度的字符串变换为长度较短、位数固定的输出序列值。
MD5和SHA都属于Hash算法,那到底什么是Hash算法呢?
在理解Hash算法之前,需要先澄清一个非常容易产生歧义的地方:Hash算法与Hash表。
Hash算法是一种数学函数,简单地说,就是将一串数据/信息K通过Hash函数进行转换/摘要,输出另一段固定长度但更精简的数据/信息V,作为K的「指纹」。
而Hash表是一种将「键」与「值」对应起来的数据存储结构,Java中的HashMap就是这种数据存储结构。
Hash算法的核心思想就是「散列」,什么是散列?——让数据尽可能「散开」、「排列」在不同的位置。就像这样:
北京五环中「散列」中不同的商家店铺,不然全挤在一个地方既拥挤又没啥生意。
所以,Hash算法的特点包括“
1、确定性:如果两个散列值(地址)不同,那么原始输入(业态)也是不同的;
2、防碰撞:即使散列值(地址都在同一幢楼)相同,原始输入(业态)也可能不同;
3、不可逆:一个散列值可能对应无数个明文,理论上并不能确切地知道原始输入,即使穷尽目前一切计算资源也不可能;
4、混淆性:原始输入有一点点微小的改变,散列值都会差别巨大,又叫雪崩性。
有些小伙伴可能会经常听见所谓「密码盐」,这是啥呢?
日常生活中,食盐是必不可少的,否则食物就没有味道。而前面也提过,MD5、SHA等密码加密算法已经被破解了,所以现在如果只是简单地使用MD5等加密方法,密码会很容易被破解。可以试试一些在线的MD5破解网站,例如:
所以,为了给MD5提供更安全的保护,可以通过在密码任意固定位置插入特定字符串,使得加密后的结果和原始加密结果不同。例如密码是e10adc3949ba59abbe56e057f20fe,那么在第八个字符之后再加入一些特殊字符「123456」后就是
e10adc3912345649ba59abbe56e057f20fe
这种插入特定字符串的过程就被称之为给密码加盐。
在早期的互联网应用中,用户表中通常只用password这个字段存储加密后的密码。在MD5被破解后,为了让MD5更安全,用户表中就新增了一个字段:Salt(盐)。Salt可以是任意字母、数字、或是字母或数字的组合,但必须是随机产生的,每个用户的Salt都不一样。一般常用用户账户名或昵称作为Salt。
验证过程是:
1、前端通过HTTP方法传输经过MD5加密后的密码PWD1
2、后端执行PWD2 = MD5(PWD1 + Salt)
3、如果PWD2 == password,那么验证通过,否则失败
这一过程各位可以自行实践。
感谢您的大驾光临!咨询技术、产品、运营和管理相关问题,请关注后留言。欢迎骚扰,不胜荣幸~
猜你喜欢
- 2025-05-30 为什么说网上的md5加密解密站都是通过彩虹表解密的?
- 2025-05-30 一文读懂md5,md5有什么用,什么是md5加盐
- 2025-05-30 Java md5加密解密数据
- 2025-05-30 MD5是什么?如何进行MD5校验?
- 2025-05-30 专家教你简单又轻松的MD5解密方法,一看就会
- 2024-09-27 MD5 到底算不算一种加密算法? md5是数据加密算法吗
- 2024-09-27 在网站开发时你还是只用md5加密密码吗?
- 2024-09-27 通过一次安全处理暴露的问题 通过一次安全处理暴露的问题的英文
- 2024-09-27 Qt怎么使用MD5加密 md5在线加密解密工具
- 2024-09-27 Java加密体系(MD5算法) javamd5密钥加密解密
你 发表评论:
欢迎- 06-24发现一款开源宝藏级工作流低代码快速开发平台
- 06-24程序员危险了,这是一个 无代码平台+AI+code做项目的案例
- 06-24一款全新的工作流,低代码快速开发平台
- 06-24如何用好AI,改造自己的设计工作流?
- 06-24濮阳网站开发(濮阳网站建设)
- 06-24AI 如何重塑前端开发,我们该如何适应
- 06-24应届生靠这个Java简历模板拿下了5个offer
- 06-24服务端性能测试实战3-性能测试脚本开发
- 562℃Oracle分析函数之Lag和Lead()使用
- 560℃几个Oracle空值处理函数 oracle处理null值的函数
- 547℃Oracle数据库的单、多行函数 oracle执行多个sql语句
- 544℃0497-如何将Kerberos的CDH6.1从Oracle JDK 1.8迁移至OpenJDK 1.8
- 541℃Oracle 12c PDB迁移(一) oracle迁移到oceanbase
- 535℃【数据统计分析】详解Oracle分组函数之CUBE
- 524℃最佳实践 | 提效 47 倍,制造业生产 Oracle 迁移替换
- 515℃Oracle有哪些常见的函数? oracle中常用的函数
- 最近发表
- 标签列表
-
- 前端设计模式 (75)
- 前端性能优化 (51)
- 前端模板 (66)
- 前端跨域 (52)
- 前端缓存 (63)
- 前端react (48)
- 前端aes加密 (58)
- 前端脚手架 (56)
- 前端md5加密 (54)
- 前端富文本编辑器 (47)
- 前端路由 (61)
- 前端数组 (73)
- 前端js面试题 (50)
- 前端定时器 (59)
- Oracle RAC (73)
- oracle恢复 (76)
- oracle 删除表 (48)
- oracle 用户名 (74)
- oracle 工具 (55)
- oracle 内存 (50)
- oracle 导出表 (57)
- oracle 中文 (51)
- oracle的函数 (57)
- 前端调试 (52)
- 前端登录页面 (48)
本文暂时没有评论,来添加一个吧(●'◡'●)