武知行

加密算法

2026年03月08日0 条评论

加密算法

可逆加密算法

对称加密

对称加密就是加密和解密都使用相同的密钥。

常见的对称加密算法有DES,AES

  • DES

    是对称加密算法领域中的典型算法,其密钥默认长度为56位。

  • 3DES

    它使用3条56位的密钥对数据进行三次加密。是DES的一个更安全的变形。

  • AES

    高级数据加密标准,能够有效抵御已知的针对DES算法的所有攻击,默认密钥长度为128位,还可以供选择192位,256位。这个位指的是bit。

对称加密的缺点就是密钥的管理困难,一旦密钥泄露,会造成严重后果。

应用:

  • 加密用户的敏感信息,例如名字,电话,银行卡

由于对称加密需要传输密钥,即A生成的密钥需要传输给B,那么在茫茫不可信任的互联网,你又怎么将密钥传输给我呢?这是对称加密最大的问题。

非对称加密

常见的非对称加密算法有RSA、SM2等

  • RSA密钥至少为500位长,一般推荐使用1024位。

非对称加密是使用了一对密钥,公钥和私钥,私钥不能泄密,非对称性体现在使用公钥加密的只能通过对应的私钥来解密。

非对称加密算法的密匙是通过一系列算法获取到的一长串随机数,通常随机数的长度越长,加密信息越安全。通过私钥经过一系列算法是可以推导出公钥的,也就是说,公钥是基于私钥而存在的。但是无法通过公钥反向推倒出私钥,这个过程的单向的。

非对称加密非常安全,但是比起对称加密,计算时间长。

非对称加密生成的私钥并不需要传输,所以可以将大段的信息进行对称加密,再将对称加密的密钥进行非对称加密(HTTPS)。

应用:

  • HTTPS中的SSL/TLS协议或SSH协议,核心原理都是非对称加密
  • 使用提供商的接口,提供商可以给一个公钥,我们使用这个公钥进行数据加密,提供商使用私钥对数据进行解密

ECC(Elliptic Curves Cryptography):椭圆曲线算法

ECC 与 RSA 相比,有以下的优点:

  • 相同密钥长度下,安全性能更高,如160位ECC已经与1024位RSA、DSA有相同的安全强度
  • 计算量小,处理速度快,在私钥的处理速度上(解密和签名),ECC远 比RSA、DSA快得多
  • 存储空间占用小 ECC的密钥尺寸和系统参数与RSA、DSA相比要小得多, 所以占用的存储空间小得多
  • 带宽要求低使得ECC具有广泛得应用前景

在 ssh-keygen 中,ECC算法的相应参数是 -t ecdsa

不可逆加密算法

常见的不可逆加密算法有MD5,HMAC,SHA1、SHA-2算法,采用的是散列算法。

一头活蹦乱跳的牦牛被加工成一包包牛肉干,这个就是一次MD5操作。在加工过程中,N多身体部位有损失,故无法通过牛肉干复原出一头牦牛。

MD5计算,对原始消息(Message)做有损的压缩计算,无论消息(输入值)的长度字节是多少,是1亿字节、1个字节、还是0个字节,都会生成一个固定长度(128位/16字节)的消息摘要(输出值)。

加密后的md5值:

79054025255fb1a26e4bc422aef54eb4

值得一提的是,MD5、SHA-1已被我国王小云教授破解。

王小云多年从事密码理论及相关数学问题研究。她提出了密码哈希函数的碰撞攻击理论,即模差分比特分析法,破解了包括MD5、SHA-1在内的5个国际通用哈希函数算法。

但是准确的说是快速碰撞,依然不可能反向推出原始信息,王小云的工作还是成就显著的,但不意味着MD5就不安全了,想根据MD5哈希值对原始报文信息进行篡改目前还是不可能的。

应用:

  • 密码存储
  • 数据完整性校验
  • 数字签名

加密方案

当我们的数据库和代码泄露了,黑客也无法获取原密码。

  • 一阶段,采用MD5的算法对密码进行加密,本身MD5加密算法是非常安全的,但是随着彩虹表的出现,导致大量强度不够的密码能够被推算出来。

    常见密码库+MD5=彩虹表

  • 二阶段,那么可以采用加盐的方式,就是在用户密码后面加上很长的固定盐字符串,再计算md5,那反推出原始密码就变得非常困难了。

    但是如果我们的代码也泄露,攻击者拿到了盐,依然可以算出一个彩虹表,对简单的密码实施破解。

  • 三阶段,我使用了加盐的慢哈希。慢哈希是指执行这个哈希函数非常慢,这样暴力破解需要枚举遍历所有可能结果时,就需要花上非常非常长的时间。比如:bcrypt就是这样一个慢哈希函数。

    bcrypt(SHA512(password)+salt+cost)
    

    通过调整 cost 参数,可以调整该函数慢到什么程度。假设让 bcrypt 计算一次需要0.5秒,遍历6位的简单密码,需要的时间为:((26 * 2 + 10)^6) / 2 秒,约 900 年。

  • 四阶段,我们采用随机盐来解决固定盐的泄露问题,我们每次都使用伪随机数生成一个比较长的随机盐,那么彩虹表就失效了,我们假设我们使用了两个不同的固定盐,那么攻击者就需要根据这两个盐去生成两份彩虹表,三个固定盐就是三份彩虹表,每个用户随机生成一个盐,那么需要为每个用户制作一个彩虹表...

其他常用算法

Base64

Base64不是安全领域下的加解密算法,只是一个编码算法,通常用于把二进制数据编码为可写的字符形式的数据,特别适合在http,mime协议下的网络快速传输数据。采用Base64编码不仅比较简短,同时也具有不可读性。

加密算法在生产中的应用

AES应用

背景:

业务需要对手机号进行加密处理然后传输给业务方

References

评论 (0)

登录后即可发表评论

暂无评论,来发表第一条评论吧!