信息数据传输的安全一直都是个很重要的话题,从刚开始当程序员时错以为MD5、SHA1这些哈希算法就是加密算法,到后来慢慢接触对称加密、非对称加密这些概念,再到对接各种大开发平台接口的时候看到他们通过 RSA 进行签名配合 AES 加密报文这些方式防止接口参数被篡改和信息泄露。今天就简单的梳理一下两种加密算法的区别和各自适用的场景。
加密算法的分类
加密的基本思想是将数据转换成一种掩盖了原始含义的形式,只有经过适当授权的人才能解密。使用相同或不同的密钥对数据进行加解密,如果加密和解密使用相同的密钥,则称该过程是对称的。如果使用不同的密钥,则该过程被定义为非对称的。
当今使用最广泛的两种加密算法是 AES 和 RSA。两者都非常有效和安全,但它们通常以不同的方式使用。
AES 加密
AES 算法依次对每个 128 位数据块应用一系列数学变换。由于这种方法的计算要求较低,AES 可用于笔记本电脑和智能手机等消费类设备上进行数据加密,以及快速加密大量数据。
AES 是一种对称算法,它使用相同的 128、192 或 256 位密钥进行加密和解密。128、192 或 256 位的密钥可以理解为分别对应16、24和32个字节的16进制字符串密钥,AES 系统的安全性会随密钥长度呈指数增长。
即使使用 128 位密钥,通过对 2128 个可能的密钥值进行暴力枚举,来尝试破解 AES加密后的数据的任务也是个非常计算密集型的任务。事实上,AES 从未被破解,并且根据当前的技术趋势,预计在未来几年内仍将保持安全。
RSA 加密
RSA 以麻省理工学院的科学家(Rivest、Shamir 和 Adleman)的名字命名, 于1977 年首次公布。它是一种非对称算法,它使用公开的已知密钥进行加密,但需要另外一个不同的密钥进行解密,这个不同的密钥只有预期的接收者知道。
网上不少例子说的是公钥用于加密,私钥用于解密,其实这个说法不对,私钥和公钥是一对,都可以加解密,配对使用,只不过公钥可以公布出去,而私钥是持有者自己保留的。
一般的用法是私钥加密用于签名防数据被篡改,公钥加密用于加密防敏感信息,防止泄露。
- 私钥加密公钥解密,能证明“私钥拥有者” 的唯一身份,用于签名。
- 公钥加密私钥解密,确保发送的信息,只有"私钥拥有者"能够解密。
这块先卖个关子,理解不了的话后面给大家介绍开放平台API验签和加密流程的时候再给大家细讲。
RSA 算法需要的计算量比 AES 高,但速度要慢得多。它比较适合用于加密少量数据。
RSA和AES结合使用
AES 算法的一个主要问题是,作为一种对称算法,它要求加密方和解密方使用相同的密钥。这就产生了一个关键的密钥管理问题——如何将非常重要的密钥分发给分布在世界各地的授权接收者,而不会冒在传输途中某个地方考虑不周导致密钥泄露的巨大风险?答案是结合 AES 和 RSA 加密的优势。
在包括互联网在内的许多现代通信环境中,大量交换的数据都通过快速 AES 算法进行加密。为了获得解密数据所需的密钥,授权接收者发布一个公钥,同时保留一个只有他们知道的相关私钥。然后,发送方使用该公钥对他们自己的 AES 密钥进行RSA加密传输给接收方,接收方使用私钥解密得到AES密钥,再用该密钥对数据进行解密。