先说说对称加密和非对称加密这两个主力。咱先从简单的入手,对称加密就是两边都拿着同一把钥匙,而且跑得特别快,速度是这一行的王牌。不过麻烦的是这钥匙得保管好,要是不小心露馅儿,数据就没了安全性。具体操作上,通常是把大段的文字切成小块一块一块地啃,常见的块长度是64位或者128位。要是文字不够整,那就先填充一下;太短了也没关系,直接补上就行。 主流的玩法主要有五种。ECB模式虽然最简单,但也是最不安全的,就好比直接把明文分开给人看。CBC模式稍微好点,会用前一个密文和当前明文做运算,不过第一个块还得给个初始向量(IV)。CFB模式把密文送回输入端可能会被重放攻击利用。OFB模式逻辑简洁点,直接用上次的输出和明文异或。CTR模式是计数器模式,直接累加计数器来产生密钥流,这个模式速度快也灵活,还是AES-GCM的灵魂所在。 还有一种是序列密码,这就和分组密码不一样了,它是一个一个字符或者一小块一小块地咬。这就靠伪随机数生成器(PRNG)来生成密钥流。有两种机制:自同步和同步。不管哪种核心都在“密钥生成器”的强度上。 咱们国家还有自己的家伙什:SM1和SM4。SM1用硬件加速连老设备都能跑得动;SM4跟AES有亲戚关系,国产芯片里普及率最高;DES和3DES就比较过时了,密钥太短容易被破解。 再来看非对称加密,它最大的特点是把钥匙拆成两半。公钥是给大家用的加密钥匙;私钥是自己藏着的解密钥匙。只要公钥加密用私钥来解或者私钥签名让公钥来验证这条路走得通,就能保证数据没被篡改和来源可信。 这方面有三大主流算法。RSA是1977年MIT三个人搞出来的玩意儿名字取自他们姓氏首字母。大数分解越难RSA就越硬。ElGamal是基于离散对数问题的乘法结构天生抗碰撞。椭圆曲线ECC也是搞离散对数的,但曲线更弯曲同样安全程度下密钥长度只要RSA的三分之一很省带宽和存储。国密SM2也是国家密码管理局弄出来的兼容ECC标准已经写进好多国标高规里了。 非对称加密最大的好处就是公钥可以全网用简化了分发还能防抵赖但就是加解密太慢是个硬伤。 短信验证码和语音通话这种事儿就适合对称加密加上HMAC几毫秒就能搞定。云盘上传和物联网传感这种场景用SM4硬件加速性能也不会差。SSL/TLS握手或者数字证书签发用RSA发公钥然后ECC做业务密钥交换就行。区块链和数字货币这种去中心化的业务就用非对称签名加上零知识证明来防篡改。 最后要记住没有绝对完美的只有适合场景的最佳选择把对称加密的速度和非对称加密的信任混搭起来用才是现代安全通信的最佳实践。