常用的加密算法有哪些?
2019-10-18 · 微策略专注于企业级分析和移动应用软件开发
对称密钥加密
对称密钥加密 Symmetric Key Algorithm 又称为对称加密、私钥加密、共享密钥加密:这类算法在加密和解密时使用相同的密钥,或是使用两个可以简单的相互推算的密钥,对称加密的速度一般都很快。
分组密码
DES、3DES
AES
- 合并(AddRoundKey):矩阵中的每个字节与该回合密钥做XOR异或运算,其中回合密钥由主密钥通过Rijndael密钥生成方案生成,这个密钥大小跟原矩阵一致。
- 替换(SubBytes):矩阵中的每个字节通过一个8位查找表对应的特定字节所替换。这里的8位查找表为S-box(Substitution-box, 置换盒),用来模糊密钥与密文之间的关系,实现输入输出的非线性特征。 行混淆(ShiftRows):矩阵中的每一行的各个字节循环向左方位移,位移量随行数递增。列混淆(MixColumns):每一列的四个字节通过线性变换互相结合,即与一个固定的多项式做乘法。
安全性
RSA
ECC
数字签名
分组密码 Block Cipher 又称为“分块加密”或“块加密”,将明文分成多个等长的模块,使用确定的算法和对称密钥对每组分别加密解密。这也就意味着分组密码的一个优点在于可以实现同步加密,因为各分组间可以相对独立。
与此相对应的是流密码:利用密钥由密钥流发生器产生密钥流,对明文串进行加密。与分组密码的不同之处在于加密输出的结果不仅与单独明文相关,而是与一组明文相关。
数据加密标准 DES Data Encryption Standard 是由IBM在美国国家安全局NSA授权下研制的一种使用56位密钥的分组密码算法,并于1977年被美国国家标准局NBS公布成为美国商用加密标准。但是因为DES固定的密钥长度,渐渐不再符合在开放式网络中的安全要求,已经于1998年被移出商用加密标准,被更安全的AES标准替代。
DES使用的Feistel Network网络属于对称的密码结构,对信息的加密和解密的过程极为相似或趋同,使得相应的编码量和线路传输的要求也减半。
DES是块加密算法,将消息分成64位,即16个十六进制数为一组进行加密,加密后返回相同大小的密码块,这样,从数学上来说,64位0或1组合,就有2^64种可能排列。DES密钥的长度同样为64位,但在加密算法中,每逢第8位,相应位会被用于奇偶校验而被算法丢弃,所以DES的密钥强度实为56位。
3DES Triple DES,使用不同Key重复三次DES加密,加密强度更高,当然速度也就相应的降低。
高级加密标准 AES Advanced Encryption Standard 为新一代数据加密标准,速度快,安全级别高。由美国国家标准技术研究所NIST选取Rijndael于2000年成为新一代的数据加密标准。
AES的区块长度固定为128位,密钥长度可以是128位、192位或256位。AES算法基于Substitution Permutation Network代换置列网络,将明文块和密钥块作为输入,并通过交错的若干轮代换"Substitution"和置换"Permutation"操作产生密文块。
AES加密过程是在一个4*4的字节矩阵(或称为体State)上运作,初始值为一个明文区块,其中一个元素大小就是明文区块中的一个Byte,加密时,基本上各轮加密循环均包含这四个步骤:
已知的针对AES唯一的成功攻击是旁道攻击,2005年时使用缓存时序攻击法,破解了一个装载OpenSSL AES加密系统的客户服务器。
针对区块加密系统最常见的方式,是通过对加密循环次数较少的版本尝试攻击,然后改进算法后继续攻击高级版本,目前这个破解方法还不太实用。
另外由于AES的数据结构具有井然有序的代数结构,有一个担心就是相关的代数攻击,目前基于此的有效攻击方法也暂时没有出现。
非对称密钥加密
非对称密钥加密 Asymmetric Key Cryptography 也可称为 Public Key Cryptography 公开密钥加密:需要两个密钥,分为公钥和私钥,一个用作加密而另外一个只能用于解密,而加密的密钥并不能用来解密。
根据此特性,除了加解密的应用外,还可以确保数字签名的功能:某用户用私钥加密明文,任何人都可以用该用户的公钥解密密文,以此判定身份。
对称密钥需要一个安全的渠道可以交换共用的密钥,而非对称密钥可以将加密公钥公开发布;不过公钥加密在计算上相当复杂,性能远比不上对称加密,所以一般会利用公钥加密来交换对称密钥,然后依靠对称密钥来传输具体的信息。
RSA是由三个人的名字组成 Ron Rivest、Adi Shamir、Leonard Adleman于1977年在MIT提出,并于1987年公布,是目前最常用的公钥加密算法。
RSA算法的核心是极大整数的因式分解,理论基础在于由两个大质数算出乘积很容易,但是要从一个极大整数因式分解得出两个质数却很难。
ECC即 Elliptic Curve Cryptography 椭圆曲线密码学,是基于椭圆曲线数学建立公开密钥加密的算法。ECC的主要优势是在提供相当的安全等级情况下,密钥长度更小。
ECC的原理是根据有限域上的椭圆曲线上的点群中的离散对数问题ECDLP,而ECDLP是比因式分解问题更难的问题,是指数级的难度。而ECDLP定义为:给定素数p和椭圆曲线E,对Q=kP,在已知P,Q 的情况下求出小于p的正整数k。可以证明由k和P计算Q比较容易,而由Q和P计算k则比较困难。
数字签名 Digital Signature 又称公钥数字签名是一种用来确保数字消息或文档真实性的数学方案。一个有效的数字签名需要给接收者充足的理由来信任消息的可靠来源,而发送者也无法否认这个签名,并且这个消息在传输过程中确保没有发生变动。
数字签名的原理在于利用公钥加密技术,签名者将消息用私钥加密,然后公布公钥,验证者就使用这个公钥将加密信息解密并对比消息。一般而言,会使用消息的散列值来作为签名对象。
1》MD5算法(Message Digest Algorithm 5) 可以保证数据传输完整性和一致性 摘要后长度为16字节 摘要信息中不包含原文信息
所有加密结果不可逆(无法解密) 一般在传送文件时 对源文件进行md5 hash 传送到对方后 检测hash值是否相等 如果相等文件传输正确
如果不相等 说明文件被篡改(加入木马)或者未传送完成
其他MD算法 MD2(16字节)
public static void main(String[] args) throws NoSuchAlgorithmException {
MessageDigest md=MessageDigest.getInstance("MD5") ;
String code="hello";
byte[] bt=md.digest(code.getBytes());
System.out.println(bt.length);
DES(Data Encryption Standard):数据加密标准,速度较快,适用于加密大量数据的场合。
3DES(Triple DES):是基于DES,对一块数据用三个不同的密钥进行三次加密,强度更高。
AES(Advanced Encryption Standard):高级加密标准,是下一代的加密算法标准,速度快,安全级别高。
密钥算法用来对敏感数据、摘要、签名等信息进行加密,常用的密钥算法包括:
DES(Data Encryption Standard):数据加密标准,速度较快,适用于加密大量数据的场合;
3DES(Triple DES):是基于DES,对一块数据用三个不同的密钥进行三次加密,强度更高;
RC2和RC4:用变长密钥对大量数据进行加密,比DES快;
RSA:由RSA公司发明,是一个支持变长密钥的公共密钥算法,需要加密的文件快的长度也是可变的;
DSA(Digital Signature Algorithm):数字签名算法,是一种标准的DSS(数字签名标准);
AES(Advanced Encryption Standard):高级加密标准,是下一代的加密算法标准,速度快,安全级别高,目前AES标准的一个实现是 Rijndael算法;
BLOWFISH:它使用变长的密钥,长度可达448位,运行速度很快;
其它算法:如ElGamal、Deffie-Hellman、新型椭圆曲线算法ECC等。
2、单向散列算法
单向散列函数一般用于产生消息摘要,密钥加密等,常见的有:
MD5(Message Digest Algorithm5):是RSA数据安全公司开发的一种单向散列算法,MD5被广泛使用,可以用来把不同长度的数据块进行暗码运算成一个128位的数值;
SHA(Secure Hash Algorithm):这是一种较新的散列算法,可以对任意长度的数据运算生成一个160位的数值;
MAC(Message Authentication Code):消息认证代码,是一种使用密钥的单向函数,可以用它们在系统上或用户之间认证文件或消息。HMAC(用于消息认证的密钥散列法)就是这种函数的一个例子;
CRC(Cyclic Redundancy Check):循环冗余校验码,CRC校验由于实现简单,检错能力强,被广泛使用在各种数据校验应用中。占用系统资源少,用软硬件均能实现,是进行数据传输差错检测地一种很好的手段(CRC并不是严格意义上的散列算法,但它的作用与散列算法大致相同,所以归于此类)。
广告 您可能关注的内容 |