一、加密算法分类
双向加密算法 | 单向加密算法(散列算法) | |
对称加密算法 | 非对称加密算法 | MD5,SHA1,HMAC |
AES、DES、3DES | RSA,DSA,ECC | |
双方采用共同的密钥和加密算法 | A用B的公钥将消息加密,发送给B,B用自己的私钥对消息进行解密的过程 | 不可逆,只能加密,不能解密 |
二、算法比较
1、散列算法比较
名称 | 安全性 | 速度 |
SHA-1 | 高 | 慢 |
MD5 | 中 | 快 |
2、对称加密算法比较
名称 | 密钥名称 | 运行速度 | 安全性 | 资源消耗 |
DES | 56位 | 较快 | 低 | 中 |
3DES | 112位或168位 | 慢 | 中 | 高 |
AES | 128、192、256位 | 快 | 高 | 低 |
3、非对称加密算法比较
名称 | 成熟度 | 安全性 | 运算速度 | 资源消耗 |
RSA | 高 | 高 | 中 | 中 |
ECC | 高 | 高 | 慢 | 高 |
三、算法特点
1、对称加密
- 特点:算法公开、它要求和接发送方收方在安全通信之前,商定一个秘钥,共同用这个秘钥进行加密和解密。
- 密钥管理:比较难,不适合互联网,一般用于内部系统
- 安全性:中
- 加密速度:快好 几个数量级 (软件加解密速度至少快
100
倍,每秒可以加解密数M
比特 数据),适合大数据量的加解密处
2、非对称加密
- 特点:算法强度复杂
- 密钥管理:密钥容易管理
- 安全性:高
- 加密速度:比较慢,适合 小数据量 加解密或数据签名
3、散列算法
- 特点:算法强度复杂
- 密钥管理:无秘钥
- 安全性:极高
- 加密速度:很慢
四、SHA256散列算法
SHA256(Secure Hash Algorithm)算法是SHA家族(SHA1、SHA224、SHA256等)中的重要一员,SHA系列算法是美国国家安全局设计,美国国家标准与技术研究院 发布的一系列密码散列函数。
著名的比特币算法就是通过SHA256实现的。由于SHA家族算法的优异加密效果,为此在很多层面具有广泛的应用,比如在银行、购物网站等都使用SHA加密算法对用户的敏感信息加密,用户首次设置密码时,系统对密码进行SHA加密并将加密结果保存到数据库,如果用户需要消费或者购物时,用户输入密码后,系统再次对密码进行SHA计算,并将结果与数据库加密密码进行比较,如果两者一致,就认为用户合法。这样做的好处十分明显,比如相关工作人员在没有权限的情况下,很难知道用户的密码与相关敏感信息。
SHA算法能否被解密呢?
SHA是散列算法,并非加密算法,也当然也不存在解密的问题。正确的说法应该叫“破解”。所谓破解就是找到任意一个源数据,能够生成相同的目标数据,即“碰撞”。目前的计算能力下,SHA256基本上是不可破解的,即找不到(或概率极小)“碰撞”结果。
然而,就在2017年2月24日,谷歌公司宣布成功破解SHA1散列算法。Google解释,所谓的碰撞是让不同的文件产生同样的摘要,这事通常不会发生,除非SHA1算法含有安全漏洞(密码学家们在2005年就发现SHA1含有理论上的漏洞,可造成碰撞攻击(Collision attack),允许骇客打造拥有同样讯息摘要的文件,以方便伪装及取代合法文件)。Google与CWI花费了两年的时间进行研究,终于发现在SHA1上产生碰撞的第一个可行技术,成功地执行了碰撞攻击。为了证明此事,Google释出了两个含有不同内容、却拥有同样讯息摘要的PDF档案。
虽然已经证明了SHA1的碰撞攻击是得以实践的,但不幸中的大幸是,要执行该攻击必须使用非常大量的运算资源,依照Google的说法,这是他们所完成的最大规模的运算之一,总计执行了9百京(quintillion,10的18次方)次的SHA1运算,若以一年为期,要用6500个CPU来完成第一阶段的计算,再用110个GPU进行第二阶段计算。相较之下,另一讯息摘要演算法MD5只要利用一台智慧型手机及30秒的时间就能被攻陷。
五、Base64加密算法
严格来讲base64并不是一种加密算法,而是一种编码转换。
Base64一般用于在HTTP协议下传输二进制数据,由于HTTP协议是文本协议,所以在HTTP协议下传输二进制数据需要将二进制数据转换为字符数据。然而直接转换是不行的。因为网络传输只能传输可打印字符。什么是可打印字符?在ASCII码中规定,0~31、127这33个字符属于控制字符,32~126这95个字符属于可打印字符,也就是说网络传输只能传输这95个字符,不在这个范围内的字符无法传输。那么该怎么才能传输其他字符呢?其中一种方式就是使用Base64。
Base64特点
可逆,后一两位可能有“=”,生成的编码都是ascii字符。
优点:速度快,ascii字符,肉眼不可理解
缺点:编码比较长,非常容易被破解,仅适用于加密非关键信息的场合
六、加密算法输出长度
算法 | 输出长度(bit--位) | 输出长度(Byte--字节) |
MD5 | 128 | 16 |
SHA1 | 160 | 20 |
SHA256 | 256 | 32 |
| 所占字节 | |
| 一个英文字母 | 一个中文汉字 |
ASCII | 1 | 2 |
UTF-8 | 1 | 3 |
Unicode | 2 | 2 |