zoukankan      html  css  js  c++  java
  • 加密算法

    常用的加密算法总体可以分为两类:单项加密和双向加密,双向加密又分为对称加密和非对称加密,因此主要分析下面三种加密算法:

    对称加密算法、非对称加密算法和单项加密算法(Hash算法)。

    1、对称加密算法(AES、DES、3DES)

    对称加密算法是指加密和解密采用相同的密钥,是可逆的(即可解密)。

    AES加密算法是密码学中的高级加密标准,采用的是对称分组密码体制,密钥长度的最少支持为128。AES加密算法是美国联邦政府采用的区块加密标准,这个标准用来替代原先的DES,已经被多方分析且广为全世界使用。

    优点:加密速度快

    缺点:密钥的传递和保存是一个问题,参与加密和解密的双方使用的密钥是一样的,这样密钥就很容易泄露。

    2、非对称加密算法(RSA、DSA)

    非对称加密算法是指加密和解密采用不同的密钥(公钥和私钥),因此非对称加密也叫公钥加密,是可逆的(即可解密)。

    RSA加密算法是基于一个十分简单的数论事实:将两个大素数相乘十分容易,但是想要对其乘积进行因式分解极其困难,因此可以将乘积公开作为加密密钥。虽然RSA的安全性一直未能得到理论上的证明,但它经历了各种攻击至今未被完全攻破。 

    优点:加密和解密的密钥不一致,公钥是可以公开的,只需保证私钥不被泄露即可,这样就密钥的传递变的简单很多,从而降低了被破解的几率。

    缺点:加密速度慢

    RSA加密算法既可以用来做数据加密,也可以用来数字签名。

    --数据加密过程:发送者用公钥加密,接收者用私钥解密(只有拥有私钥的接收者才能解读加密的内容)

    --数字签名过程:甲方用私钥加密,乙方用公钥解密(乙方解密成功说明就是甲方加的密,甲方就不可以抵赖)

    3、Hash加密算法(MD5)

    MD5全称是Message-Digest Algorithm 5(信息摘要算法5),单向的算法不可逆(被MD5加密的数据不能被解密)。MD5加密后的数据长度要比加密数据小的多,且长度固定,且加密后的串是唯一的。

    适用场景:常用在不可还原的密码存储、信息完整性校验等。

    信息完整性校验:典型的应用是对一段信息产生信息摘要,以防止被篡改。如果再有一个第三方的认证机构,用MD5还可以防止文件作者的“抵赖”,这就是所谓的数字签名应用。

    疑问一:单项散列函数为什么不可逆??

    原来好多同学知识知道md5加密是不可逆的,却不知道是为什么,其实散列函数可以将任意长度的输入经过变化得到不同的输出,如果存在两个不同的输入得到了相同的散列值,我们称之为这是一个碰撞,因为使用的hash算法,在计算过程中原文的部分信息是丢失了的,一个MD5理论上可以对应多个原文,因为MD5是有限多个,而原文是无限多个的。

    网上看到一个形象的例子:2 + 5 = 7,但是根据 7 的结果,却并不能推算出是由 2 + 5计算得来的

    疑问二:为什么有些网站可以解密MD5后的数据??

    MD5解密网站,并不是对加密后的数据进行解密,而是数据库中存在大量的加密后的数据,对用户输入的数据进行匹配(也叫暴力碰撞),匹配到与之对应的数据就会输出,并没有对应的解密算法。

    MD5改进

    由以上信息可以知道,MD5加密后的数据也并不是特别安全的,其实并没有绝对的安全策略,我们可以对MD5进行改进,加大破解的难度,典型的加大解密难度的方式有一下几种:

    加盐(Salt):在明文的固定位置插入随机串,然后再进行MD5先加密,后乱序:先对明文进行MD5,然后对加密得到的MD5串的字符进行乱序先乱序,后加密:先对明文字符串进行乱序处理,然后对得到的串进行加密先乱序,再加盐,再MD5等HMac消息认证码

    也可以进行多次的md5运算,总之就是要加大破解的难度。

    4、混合加密

    由于以上加密算法都有各自的缺点(RSA加密速度慢、AES密钥存储问题、MD5加密不可逆),因此实际应用时常将几种加密算法混合使用。

    例如:RSA+AES:

    采用RSA加密AES的密钥,采用AES对数据进行加密,这样集成了两种加密算法的优点,既保证了数据加密的速度,又实现了安全方便的密钥管理。

    那么,采用多少位的密钥合适呢?一般来讲密钥长度越长,安全性越高,但是加密速度越慢。所以密钥长度也要合理的选择,一般RSA建议采用1024位的数字,AES建议采用128位即可。

    5、Base64

    严格意义讲,Base64并不能算是一种加密算法,而是一种编码格式,是网络上最常见的用于传输8bid字节代码的编码方式之一。

    Base64编码可用于在HTTP环境下传递较长的标识信息,Base编码不仅不仅比较简单,同时也据有不可读性(编码的数据不会被肉眼直接看到)。

  • 相关阅读:
    软件工程学习总结
    第13次作业--邮箱的正则表达式
    第12次作业--你的生日
    第11次作业--字符串处理
    第10次作业
    找回感觉的练习
    基础网络流学习笔记
    卷积定理的证明
    快速xxx变换相关
    主席树相关
  • 原文地址:https://www.cnblogs.com/kexianting/p/11620277.html
Copyright © 2011-2022 走看看