对比HTTPS

  • HTTPS是对称与非对称加密的一种实现方式
  • HTTPS可能存在中间人劫持(服务器和客户端进行通信,C在服务器、客户端之间劫持双方的请求,作为中间人将双方的数据分别解加密后转发给对方,此时C需要拥有受客户端信任的证书)

为同时兼顾安全性及性能,建议采用由非对称加密进行对称加密密钥的传输,定期更换对称密钥(对称加密在当前计算水平上只能保证在一段时间内是安全的),使用对称加密完成所有数据的加密传输。

非对称加密

特点

  • 数据加密安全性最高,但只能用于小数据加密,且加解密耗时较高。

用途

  • 加密传输数据

此时A、B双方各持有对方公钥(公钥公开),双方使用对方公钥对待传输的数据进行加密,如此加密后的数据只有对方所持有的私钥可以解开。

  • 防止数据被伪造

此时A、B双方各持有对方公钥(公钥公开),双方使用各自的私钥对待传输的数据进行加密,如此加密后的数据只能使用公钥解密而无法伪造。

  • 加密并防止传输数据伪造
  1. 此时A、B双方各持有对方的公钥(公钥公开),对待数据进行两次非对称加密(以各自私钥进行第一次非对称加密确保数据无法被伪造,以对方公钥进行第二次非对称加密确保数据无法被第三方解密),如此加密后的数据可以达到加密并防止传输数据伪造的目的。
  2. 此时A、B双方各持有对方的公钥(公钥不公开),双方使用各自私钥对待传输数据的数据进行加密,如此加密后的数据也可以达到加密并防止传输数据伪造的目的。

对称加密

特点

  • 数据加密安全性较高,能用于大量数据加密,且加解密耗时较少。

用途

  • 加密并防止传输数据伪造
  • 对大量数据进行加密

兼容性

  • 由于各语言所支持的加密算法和填充算法不同,经实践后确定能够同时兼容PHP、iOS、android、java的加密算法为:AES-256-CBC,填充算法为:PKCS7Padding,密钥转换AES密钥算法为:PBKDF2WithHmacSHA1。

算法实现

PHP实现

iOS实现

android实现

说明:PHP官方文档中使用对称加密的方式是生成随机的向量机并把它合并到加密数据之前一起传输(优点是对于相同的数据每次加密后的数据都不同),但是android和iOS的做法则是使用salt将对称密钥转换AES密钥后作为实际加解密的密钥。