作者:E4b9a6, 创建:2021-02-03, 字数:4113, 已阅:36, 最后更新:2021-02-03
日常开发里经常遇到一些加密算法,大部分都是略知一些细节,这次有时间整理一下程序开发时经常遇到的加密算法
加密算法普遍来说分为三类
而常见主要算法有如下
实现过程
在这个过程里,任意一个拥有密钥的人均可充当接收方,对称加密是非绝对安全的加密方式,也是无法认证解密人身份的加密方式 对称加密的速度比非对称加密要快很多,适用于安全性不高但对速度敏感的应用场景 广为人知的对称加密算法主要有DES和AES,另外还有Blowfish、Skipjack、session key等对称加密的算法应用 其中最为流行的是AES加密算法
实现过程
在这个过程中,除非接收方B泄露了自己的私钥,否则不存在其他人可以读取密文的情况,公钥只能用于加密无法用于解密,基于这种特性,非对称个加密也提供数字签名的功能,即使签发电子文件使得有与实际纸张上签名效果一般
数字签名(英语:Digital Signature,又称公钥数字签名)是一种类似写在纸上的普通的物理签名,但是使用了公钥加密领域的技术实现,用于鉴别数字信息的方法,一套数字签名通常定义两种互补的运算,一个用于签名,另一个用于验证,但法条中的电子签章与数字签名,代表之意义并不相同,电子签章用以辨识及确认电子文件签署人身份、资格及电子文件真伪者,而数字签名则是以数学算法或其他方式运算对其加密,才形成的电子签章,意即并非所有的电子签章都是数字签名, --维基百科
公开密钥基础建设透过信任数字证书认证机构的根证书、及其使用公开密钥加密作数字签名核发的公开密钥认证,形成信任链架构,已在TLS实现并在万维网的HTTP以HTTPS、在电子邮件的SMTP以STARTTLS引入, --维基百科
散列(英语:Hashing)是计算机科学中一种对数据的处理方法,通过某种特定的函数/算法(称为散列函数/算法)将要检索的项与用来检索的索引(称为散列,或者散列值)关联起来,生成一种便于搜索的数据结构(称为散列表),旧译哈希(误以为是人名而采用了音译),它也常用作一种信息安全的实现方法,由一串数据中经过散列算法(Hashing algorithms)计算出来的数据指纹(data fingerprint),经常用来识别文件与数据是否有被窜改,以保证文件与数据确实是由原创者所提供
简单讲就是数据的指纹,通过特定的算法将数据制作成唯一识别码
使用方式
非安全加密方式,引用DES - 维基百科的睡眠
DES现在已经不是一种安全的加密方法,主要因为它使用的56位密钥过短,1999年1月,distributed.net与电子前哨基金会合作,在22小时15分钟内即公开破解了一个DES密钥,也有一些分析报告提出了该算法的理论上的弱点,虽然在实际中难以应用,为了提供实用所需的安全性,可以使用DES的派生算法3DES来进行加密,虽然3DES也存在理论上的攻击方法,在2001年,DES作为一个标准已经被高级加密标准(AES)所取代,另外,DES已经不再作为国家标准科技协会(前国家标准局)的一个标准
非安全加密方式,实际上是DES加密的强化版,对每个数据块应该3次DES加密,详细可参考3DES - 维基百科
密码学中,三重数据加密算法(英语:Triple Data Encryption Algorithm,缩写为TDEA,Triple DEA),或称3DES(Triple DES),是一种对称密钥加密块密码,相当于是对每个数据块应用三次数据加密标准(DES)算法,由于计算机运算能力的增强,原版DES密码的密钥长度变得容易被暴力破解;3DES即是设计用来提供一种相对简单的方法,即通过增加DES的密钥长度来避免类似的攻击,而不是设计一种全新的块密码算法>
又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准,是一种安全的加密方式,也是对称加密中最为主流的加密方式,其密钥长度为128/192/256 Bit,详细可参考AES - 维基百科
高级加密标准(英语:Advanced Encryption Standard,缩写:AES),在密码学中又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准,这个标准用来替代原先的DES,已经被多方分析且广为全世界所使用,经过五年的甄选流程,高级加密标准由美国国家标准与技术研究院(NIST)于2001年11月26日发布于FIPS PUB 197,并在2002年5月26日成为有效的标准,2006年,高级加密标准已然成为对称密钥加密中最流行的算法之一
RSA加密算法破解难度主要来自极大整数做因数分解的难度,目前而言对极大整数做因数分解仍没有很好的解决方法,故该算法在其钥匙足够长的情况下,理论上是不可能被破解的,详细可参考RSA - 维基百科
RSA加密算法是一种非对称加密算法,在公开密钥加密和电子商业中被广泛使用,RSA是1977年由罗纳德·李维斯特(Ron Rivest)、阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)一起提出的,当时他们三人都在麻省理工学院工作,RSA就是他们三人姓氏开头字母拼在一起组成的
数字签名算法(DSA)是基于模块化指数和离散对数问题的数学概念的,用于数字签名的联邦信息处理标准,DSA是Schnorr和ElGamal签名方案的变体,详细可参考Digital Signature Algorithm - Wiki
椭圆曲线密码学(ECC)是一种基于有限域上椭圆曲线的代数结构的公钥密码学方法,与非EC加密(基于普通Galois字段)相比,ECC需要更小的密钥来提供同等的安全性,详细可参考Elliptic-curve cryptography - Wiki
SHA-1(英语:Secure Hash Algorithm 1,中文名:安全散列算法1)是一种密码散列函数,SHA-1可以生成一个被称为消息摘要的160位(20字节)散列值,散列值通常的呈现形式为40个十六进制数,详细可参考SHA - Wiki
TIP:SHA1已不再是安全算法,目前业界主流也慢慢使用SHA-2/SHA-3来替换该算法
MD5消息摘要算法(英语:MD5 Message-Digest Algorithm),一种被广泛使用的密码散列函数,可以产生出一个128位(16字节)的散列值(hash value),用于确保信息传输完整一致,MD5由美国密码学家罗纳德·李维斯特(Ronald Linn Rivest)设计,于1992年公开,用以取代MD4算法,这套算法的程序在 RFC 1321 中被加以规范,详细可参考MD5 - wiki
1996年后被证明存在弱点,可以加以破解,但普通用途安全性仍然足够(例如密码加密),针对高安全性的数据则应选择SHA-2,MD5算法本身也无法防御碰撞破解,