1.算法分类图
2.加密算法的选择
前面的章节已经介绍了对称解密算法和非对称加密算法,有很多人疑惑:那我们在实际使用的过程中究竟该使用哪一种比较好呢?<br /> 我们应该根据自己的使用特点来确定,由于非对称加密算法的运行速度比对称加密算法的速度慢很多,当我们需要加密大量的数据时,建议采用对称加密算法,提高加解密速度。<br />对称加密算法不能实现签名,因此签名只能非对称算法。<br />由于对称加密算法的密钥管理是一个复杂的过程,密钥的管理直接决定着他的安全性,因此当数据量很小时,我们可以考虑采用非对称加密算法。<br /> 在实际的操作过程中,我们通常采用的方式是:采用非对称加密算法管理对称算法的密钥,然后用对称加密算法加密数据,这样我们就集成了两类加密算法的优点,既实现了加密速度快的优点,又实现了安全方便管理密钥的优点。<br /> 如果在选定了加密算法后,那采用多少位的密钥呢?一般来说,密钥越长,运行的速度就越慢,应该根据的我们实际需要的安全级别来选择,一般来说,RSA建议采用1024位的数字,ECC建议采用160位,AES采用128为即可。<br /> <br />由于非对称加密算法的运行速度比对称加密算法的速度慢很多,当我们需要加密大量的数据时,建议采用对称加密算法,提高加解密速度。<br />对称加密算法不能实现签名,因此签名只能非对称算法。<br /> <br />
3.摘要算法的特性
1.摘要算法的目的的将信息进行简单地摘要,将任意长的信息摘要成固定长的信息。比如MD5,将任意长的信息摘要成128位的摘要。
2.不可逆的,将报文摘要成一段信息后,无法通过摘要信息还原会报文。
3.冲突性。一份报文跟其他报文的摘要信息有可能是一致的,即冲突的。一般来说,摘要算法会设计得冲突性尽量小。
常用的摘要算法有:MD5、SHA(Secure Hash Algorithm)等。下面介绍MD5。
单向加密
单向加密又称为不可逆加密算法,在加密过程中不使用密钥,明文由系统加密处理成密文,密文无法解密。一般适合于验证,在验证过程中,重新输入明文,并经过同样的加密算法处理,得到相同的密文并被系统重新认证。广泛使用于口令加密。
使用单向加密的时候,传递的数据只有密文,没有明文,也没有密钥
BASE64 严格地说,属于编码格式,而非加密算法
MD5(Message Digest algorithm 5,信息摘要算法)
SHA(Secure Hash Algorithm,安全散列算法)
HMAC(Hash Message Authentication Code,散列消息鉴别码)
1.使用场景
传递敏感数据,比如说密码
在金融相关交易中,用户的密码是敏感数据,其它数据是非敏感数据,所有的金融相关应用中,客户端都有一个独立的密码输入控件,这个控件就是做单向加密用的.所有和金融相关的东西,比如说银行网站什么的.每个银行都有自己的控件,不管你有没有U盾,这个控件你必须得装,保证你传过来的敏感数据都是密文,还没有密钥,不做对外的公开
2.单向加密算法比较
(二)散列算法(Hash)
散列算法又称为 摘要算法,哈希算法
散列算法不需要密钥
Hash算法特别的地方在于它是一种单向算法,用户可以通过Hash算法对目标信息生成一段特定长度的唯一的Hash值,却不能通过这个Hash值重新获得目标信息。因此Hash算法常用在不可还原的密码存储、信息完整性校验等。
常见的Hash算法:MD2、MD4、MD5、HAVAL、SHA、SHA-1、HMAC、HMAC-MD5、HMAC-SHA1
加密算法的效能通常可以按照算法本身的复杂程度、密钥长度(密钥越长越安全)、加解密速度等来衡量。上述的算法中,除了DES密钥长度不够、MD2速度较慢已逐渐被淘汰外,其他算法仍在目前的加密系统产品中使用。
散列是信息的提炼,通常其长度要比信息小得多,且为一个固定长度。加密性强的散列一定是不可逆的,这就意味着通过散列结果,无法推出任何部分的原始信息。任何输入信息的变化,哪怕仅一位,都将导致散列结果的明显变化,这称之为雪崩效应。散列还应该是防冲突的,即找不出具有相同散列结果的两条信息。具有这些特性的散列结果就可以用于验证信息是否被修改。
单向散列函数一般用于产生消息摘要,密钥加密等,常见的有:
l MD5(Message Digest Algorithm 5):是RSA数据安全公司开发的一种单向散列算法,非可逆,相同的明文产生相同的密文。
l SHA(Secure Hash Algorithm):可以对任意长度的数据运算生成一个160位的数值;
SHA-1与MD5的比较
因为二者均由MD4导出,SHA-1和MD5彼此很相似。相应的,他们的强度和其他特性也是相似,但还有以下几点不同:
l 对强行供给的安全性:最显著和最重要的区别是SHA-1摘要比MD5摘要长32 位。使用强行技术,产生任何一个报文使其摘要等于给定报摘要的难度对MD5是2128数量级的操作,而对SHA-1则是2160数量级的操作。这样,SHA-1对强行攻击有更大的强度。
l 对密码分析的安全性:由于MD5的设计,易受密码分析的攻击,SHA-1显得不易受这样的攻击。
l 速度:在相同的硬件上,SHA-1的运行速度比MD5慢。
(三)MD5
MD5
MD,全文是Message Digest,即信息摘要的意思,是常用的信息摘要算法。
它是一种不可逆的算法,也就是说,假如将一个信息MD5摘要成一串代码,将不能通过这串代码还原回原来的信息。
使用的场景
出于这种特性,MD5常用来校验密码是否正确、校验下载文件是否完整无损。
-> 校验密码是否正确:将用户注册的密码MD5摘要后储存起来,待用户登录时将用户录入的密码MD5摘要,对比两次摘要后的信息是否相等,相等即密码正确。(这里如果加盐会更好,见后面章节)
-> 校验下载文件是否完整无损:我们常下载开源文件资源包时,可以看到网站上提供的该资源包的MD5(比如下载POI,如图一),下载文件完毕后,可通过自己的程序或直接去一些网站上计算其MD5码,如果与官网上提供的一致,则表示文件完整无损。(图二第3行日志可见,以下程序计算的MD5码与图一的官网截图一致)
直接进行MD5是否足够,为什么要加盐
如图一可见,123456的MD5码为e10adc3949ba59abbe56e057f20f883e。一般来说,MD5摘要的结果是128位的摘要信息,然后每4位用一个16进制字符表示,所有,MD5摘要的结果一般显示为32位的16进制。
如果你的系统用MD5摘要,并且无加盐,还经常使用123456为测试密码,对这一串MD5码一定很熟悉。这一些MD5码就静静地躺在DB中待校验。
如果数据库被暴露(比如拖库),坏人得到了这些MD5码,就可以通过常用密码与其MD5码的映射关系,轻而易举地翻译出大多数密码。
所以,一般来说,我们需要对原始密码进行加盐,所谓加盐,就是按照一定规则扰乱原有字符串,然后再进行MD5摘要。这个规则,自己定义,并且一定保密。
双向加密
是可以实现加密和解密双向运算的算法。需要通过密钥实现加解密计算的。
密钥种类:公钥、私钥。
公钥:可以对外公开的,就是可以在网络中传递的。
私钥:必须保密的,绝对不会对外暴露的。
在传递安全数据的时候使用。所谓安全数据,就是不可篡改的数据。如:金融交易中的收款人卡号,转账的金额,货币的种类等。
使用双向加密的时候,传递的有明文,密文,公钥。
双向加密又分对称加密和非对称加密
对称加密(DES、PBE)、非对称加密算法:
采用单钥密码系统的加密方法,同一个密钥可以同时用作信息的加密和解密,这种加密方法称为对称加密,也称为单密钥加密。
非对称加密算法需要两个密钥:公开密钥(publickey:简称公钥)和私有密钥(privatekey:简称私钥)。公钥与私钥是一对,如果用公钥对数据进行加密,只有用对应的私钥才能解密。因为加密和解密使用的是两个不同的密钥,所以这种算法叫作非对称加密算法
DES(Data Encryption Standard,数据加密算法)
PBE(Password-based encryption,基于密码验证)
RSA(算法的名字以发明者的名字命名:Ron Rivest, AdiShamir 和Leonard Adleman)
DH(Diffie-Hellman算法,密钥一致协议)
DSA(Digital Signature Algorithm,数字签名)
ECC(Elliptic Curves Cryptography,椭圆曲线密码编码学)
非对称加密算法与对称加密算法的区别
首先,用于消息解密的密钥值与用于消息加密的密钥值不同;
其次,非对称加密算法比对称加密算法慢数千倍,但在保护通信安全方面,非对称加密算法却具有对称密码难以企及的优势。
对称加密算法效率高,非对称加密安全性高.
1.使用场景
在传递安全数据的时候使用,所谓的安全数据就是不可篡改的数据.比如说金融交易中的收款人卡号,转账的金额,货币的种类等等.这些东西都是不可以篡改的.要保证安全的(数据不能篡改).因为你需要转给张三,如果中途篡改账号了的话,转账就转给别人了,那么就出现大问题了.
解决办法就是加密,给明文密文还有公钥一起交给银行,银行通过密文和公钥解密变成解密的明文,再和客户端发过来的明文进行匹配,如果解密过程出错了,可能是密文被篡改了,或者是公钥被篡改了.
如果解密没有问题,但是解密的数据和客户端传过来的数据不匹配,不一致,那么就是网络上的明文被篡改了.
不管以上任何事情发生,银行都不会处理这个请求,是为了保证安全.
2.对称与非对称算法比较
对称算法
密钥管理:比较难,不适合互联网,一般用于内部系统
安全性:中
加密速度:快好 几个数量级 (软件加解密速度至少快 100 倍,每秒可以加解密数 M 比特 数据),适合大数据量的加解密处理
非对称算法
密钥管理:密钥容易管理
安全性:高
加密速度:比较慢,适合 小数据量 加解密或数据签名
(二)对称加密
1.基本
指加密和解密使用相同密钥的加密算法,对称加密只有一个密钥。对称加密算法的优点在于加解密的高速度和使用长密钥时的难破解性。假设两个用户需要使用对称加密方法加密然后交换数据,则用户最少需要2个密钥并交换使用,如果企业内用户有n个,则整个企业共需要n×(n-1) 个密钥,密钥的生成和分发将成为企业信息部门的恶梦。对称加密算法的安全性取决于加密密钥的保存情况,但要求企业中每一个持有密钥的人都保守秘密是不可能的,他们通常会有意无意的把密钥泄漏出去——如果一个用户使用的密钥被入侵者所获得,入侵者便可以读取该用户密钥加密的所有文档,如果整个企业共用一个加密密钥,那整个企业文档的保密性便无从谈起。
数据加密过程:在对称加密算法中,数据发送方 将 明文 (原始数据) 和 加密密钥 一起经过特殊 加密处理,生成复杂的 加密密文 进行发送。
数据解密过程:数据接收方 收到密文后,若想读取原数据,则需要使用 加密使用的密钥 及相同算法的 逆算法 对加密的密文进行解密,才能使其恢复成 可读明文。
2.对称加密算法比较
名称 密钥名称 运行速度 安全性 资源消耗
DES 56位 较快 低 中
3DES 112位或168位 慢 中 高
AES 128,192,256位 快 高 低
3.AES(目前我认为是最好的)
AES(Advanced Encryption Standard):高级加密标准,是下一代的加密算法标准,速度快,安全级别高;优先用这个
AES的key要求长度为16。
AES - 要求key的长度必须是16字节。 AES相对DES效率较低,但是可以通过偏移量强化加密。
4.DES
DES(Data Encryption Standard):数据加密标准,速度较快,适用于加密大量数据的场合。网上说已经破解了,不再安全,基本没有企业在用了
DES的密文是非定长密文。根据明文数据和key数据动态伸缩的。
DES - 加密后的数据是16的整数倍。 是16字节整数倍。
3DES(Triple DES):是基于DES,对一块数据用三个不同的密钥进行三次加密,强度更高。加密效率不高,基本上不用
(三)非对称加密
指加密和解密使用不同密钥的加密算法,非对称加密是两个密钥,也称为公私钥加密。假设两个用户要加密交换数据,双方交换公钥,使用时一方用对方的公钥加密,另一方即可用自己的私钥解密。
如果企业中有n个用户,企业需要生成n对密钥,并分发n个公钥。由于公钥是可以公开的,用户只要保管好自己的私钥即可,因此加密密钥的分发将变得十分简单。同时,由于每个用户的私钥是唯一的,其他用户除了可以可以通过信息发送者的公钥来验证信息的来源是否真实,还可以确保发送者无法否认曾发送过该信息。非对称加密的缺点是加解密速度要远远慢于对称加密,在某些极端情况下,甚至能比非对称加密慢上1000倍。
加密解密方式
(1)如果使用 公钥对数据 进行加密,只有用对应的 私钥 才能 进行解密。
(2)如果使用 私钥对数据 进行加密,只有用对应的 公钥 才能 进行解密。
例子:甲方生成 一对密钥 并将其中的一把作为 公钥 向其它人公开,得到该公钥的 乙方 使用该密钥对机密信息 进行加密 后再发送给甲方,甲方再使用自己保存的另一把 专用密钥 (私钥),对 加密 后的信息 进行解密。
常见的非对称加密算法
RSA、ECC(移动设备用)、Diffie-Hellman、El Gamal、DSA(数字签名用)
RSA:由 RSA 公司发明,是一个支持变长密钥的公共密钥算法,需要加密的文件块的长度也是可变的;
DSA(Digital Signature Algorithm):数字签名算法,是一种标准的 DSS(数字签名标准);
ECC(Elliptic Curves Cryptography):椭圆曲线密码编码学。
ECC和RSA相比,在许多方面都有对绝对的优势,主要体现在以下方面:
抗攻击性强。相同的密钥长度,其抗攻击性要强很多倍。
计算量小,处理速度快。ECC总的速度比RSA、DSA要快得多。
存储空间占用小。ECC的密钥尺寸和系统参数与RSA、DSA相比要小得多,意味着它所占的存贮空间要小得多。这对于加密算法在IC卡上的应用具有特别重要的意义。
带宽要求低。当对长消息进行加解密时,三类密码系统有相同的带宽要求,但应用于短消息时ECC带宽要求却低得多。带宽要求低使ECC在无线网络领域具有广泛的应用前景。
1.非对称加密算法比较
如果没有特殊的要求,建议使用RSA
名称 成熟度 安全性 运算速度 资源消耗
RSA 高 高 中 中
ECC 高 高 慢 高
2.RSA算法
RSA 加密算法是目前最有影响力的 公钥加密算法,并且被普遍认为是目前 最优秀的公钥方案 之一。RSA 是第一个能同时用于 加密 和 数字签名 的算法,它能够 抵抗 到目前为止已知的 所有密码攻击,已被 ISO 推荐为公钥数据加密标准。
RSA 加密算法 基于一个十分简单的数论事实:将两个大 素数 相乘十分容易,但想要对其乘积进行 因式分解 却极其困难,因此可以将 乘积 公开作为 加密密钥。
案例:ZJJ_JavaBasic_2020/01/05_16:12:41_y6x6n |
---|
https://www.cnblogs.com/nick-huang/p/5066574.html
3.ECC算法
ECC 也是一种 非对称加密算法,主要优势是在某些情况下,它比其他的方法使用 更小的密钥,比如 RSA 加密算法,提供 相当的或更高等级 的安全级别。不过一个缺点是 加密和解密操作 的实现比其他机制 时间长 (相比 RSA 算法,该算法对 CPU 消耗严重)。