敲一天代码了,轻松下吧,精彩 !看人潮如海
一边听歌,一遍来看几个算法
一、数字摘要算法
数字摘要也称为消息摘要,它是一个唯一对应一个消息或文本的固定长度的值,它由一个单向 Hash 函数对消息进行计算而产生。如果消息在传递的途中改变了,接收者通过对收到消息采用相同的 Hash 重新计算,新产生的摘要与原摘要进行比较,就可知道消息是否被篡改了,因此消息摘要能够验证消息的完整性。消息摘要采用单向 Hash 函数将需要计算的内容”摘要”成固定长度的串,这个串亦称为数字指纹。这个串有固定的长度,且不同的明文摘要成密文,其结果总是不同的(相对的),而同样的明文其摘要必定一致。这样这串摘要便可成为验证明文是否是”真身”的”指纹”了。
1. Md5
MD5 即 Message Digest Algorithm 5(信息摘要算法 5),是数字摘要算法一种实现,用于确保信息传输完整性和一致性,摘要长度为 128 位。 MD5 由 MD4、 MD3、 MD2 改进而来,主要增强算法复杂度和不可逆性,该算法因其普遍、稳定、快速的特点,在产业界得到了极为广泛的使用,目前主流的编程语言普遍都已有 MD5 算法实现。
2.SHA
SHA 的全称是 Secure Hash Algorithm,即安全散列算法。 1993 年,安全散列算法(SHA)由美国国家标准和技术协会(NIST)提出,并作为联邦信息处理标准(FIPS PUB 180)公布, 1995 年又发布了一个修订版 FIPS PUB 180-1,通常称之为 SHA-1。 SHA-1 是基于 MD4 算法的,现在已成为公认的最安全的散列算法之一,并被广泛使用。SHA-1 算法生成的摘要信息的长度为 160 位,由于生成的摘要信息更长,运算的过程更加复杂,在相同的硬件上, SHA-1 的运行速度比 MD5 更慢,但是也更为安全。
二、对称加密
对称加密算法是应用较早的加密算法,技术成熟。在对称加密算法中,数据发送方将明文(原始数据)和加密密钥一起经过特殊加密算法处理后,生成复杂的加密密文进行发送,数据接收方收到密文后,若想读取原文,则需要使用加密使用的密钥及相同算法的逆算法对加密的密文进行解密,才能使其恢复成可读明文。在对称加密算法中,使用的密钥只有一个,发送和接收双方都使用这个密钥对数据进行加密和解密,这就要求加密和解密方事先都必须知道加密的密钥。
1. DES 算法
1973 年,美国国家标准局(NBS)在认识到建立数据保护标准既明显又急迫的情况下,开始征集联邦数据加密标准的方案。 1975 年 3 月 17 日, NBS 公布了 IBM 公司提供的密码算法,以标准建议的形式在全国范围内征求意见。经过两年多的公开讨论之后, 1977 年 7 月 15 日, NBS 宣布接受这建议,作为联邦信息处理标准 46 号数据加密标准(Data Encryptin Standard),即 DES 正式颁布,供商业界和非国防性政府部门使用。DES 算法属于对称加密算法,明文按 64 位进行分组,密钥长 64 位,但事实上只有 56 位参与 DES 运算(第 8、 16、 24、 32、 40、 48、 56、 64 位是校验位,使得每个密钥都有奇数个 1), 分组后的明文和 56 位的密钥按位替代或交换的方法形成密文。由于计算机运算能力的增强,原版 DES 密码的密钥长度变得容易被暴力破解,因此演变出了 3DES 算法。 3DES 是 DES 向 AES 过渡的加密算法,它使用 3 条 56 位的密钥对数据进行三次加密,是 DES 的一个更安全的变形
2. AES
AES 的全称是 Advanced Encryption Standard,即高级加密标准,该算法由比利时密码学家 Joan Daemen 和 Vincent Rijmen 所设计,结合两位作者的名字,又称 Rijndael 加密算法,是美国联邦政府采用的一种对称加密标准,这个标准用来替代原先的 DES 算法,已经广为全世界所使用,已然成为对称加密算法中最流行的算法之一。AES 算法作为新一代的数据加密标准汇聚了强安全性、高性能、高效率、易用和灵活等优 点,设计有三个密钥长度:128,192,256 位,比 DES 算法的加密强度更高,更为安全。
三、非对称加密
非对称加密算法又称为公开密钥加密算法,它需要两个密钥,一个称为公开密钥(public key),即公钥,另一个称为私有密钥(private key),即私钥。公钥与私钥需要配对使用,如果用公钥对数据进行加密,只有用对应的私钥才能进行解密,而如果使用私钥对数据进行加密,那么只有用对应的公钥才能进行解密。因为加密和解密使用的是两个不同的密钥,所以这种算法称为非对称加密算法。非对称加密算法实现机密信息交换的基本过程是:甲方生成一对密钥并将其中的一把作为公钥向其它人公开,得到该公钥的乙方使用该密钥对机密信息进行加密后再发送给甲方,甲方再使用自己保存的另一把专用密钥,即私钥,对加密后的信息进行解密。
RSA
RSA 非对称加密算法是 1977 年由 Ron Rivest、 Adi Shamirh 和 LenAdleman 开发的, RSA 取名来自开发他们三者的名字。 RSA 是目前最有影响力的非对称加密算法,它能够抵抗到目前为止已知的所有密码攻击,已被 ISO 推荐为公钥数据加密标准。 RSA 算法基于一个十分简单的数论事实:将两个大素数相乘十分容易,但反过来想要对其乘积进行因式分解却极其困难,因此可以将乘积公开作为加密密钥。
看不懂没关系,这种神奇的文章就适合收藏关注和转发朋友圈,证明我们就是java界的大神.....
最后,也是我们今天要讲的重点,上面的歌听得怎么样,是不是很带劲,是不是解决一天bug后,心情舒畅了很多呢?
- Flash/Flex学习笔记(11):如何检测摄像头是否被占用
- Flash/Flex学习笔记(10):FMS 3.5之Hello World!
- Swarm基于多主机容器网络-overlay networks 梳理
- 未来AI可能会淘汰180万个工作岗位,你感到恐惧了吗
- css基础:把所有背景图都集成在一张图片上,减少图片服务器请求次数
- Docker可视化界面(Consul+Shipyard+Swarm+Service Discover)部署记录
- windows 2008上启用防火墙后sqlserver 2005经常出现连接超时的解决办法
- 重温delphi之控制台程序:Hello World!
- Docker集中化web界面管理平台-Shipyard部署记录
- "Goole项目托管"及"CodePlex发布开源项目"要点
- Docker网络解决方案-Calico部署记录
- c#中开发ActiveX的学习笔记
- Android新手之旅(4) 通过HTTP访问web
- Flash/Flex学习笔记(9):ActionScript3.0与Javascript的相互调用
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- pymysql connect 连接mysql 报错keyerror255
- 使用android studio开发工具编译GBK转换三方库iconv的方法
- Android在类微信程序中实现蓝牙聊天功能的示例代码
- python中的yield和return—迭代器和生成器
- Android studio有关侧滑的实现代码
- 图片按照宽度等比例缩放
- Android 自定义加载动画Dialog弹窗效果的示例代码
- flutter的环境安装配置问题及解决方法
- (新)关于修改window.navigator.webdriver代码失效问题
- Android底部导航栏的三种风格实现
- Android Studio3.2中导出jar包的过程详解
- Android自定义view实现标签栏功能(只支持固定两个标签)
- python 爬虫之selenium可视化爬虫
- Android Studio3.6.+ 插件搜索不到终极解决方案(图文详解)
- Spring 整合 SpringDataRedis