非对称加解密特点
一对密钥,公钥和私钥。私钥自己持有,公钥公开给通信的对方。
如果公钥用作加密,那么私钥用作解密。
如果私钥用做加密,那么公钥用作解密。
如果数据量少可用非对称加密算法直接加密。
如果数据量大,则采用对称加密算法加密数据,非对称加密算法对 “对称加密算法使用的密钥” 进行加密
1、用作加密:A使用B的公钥对要传送的数据加密,B使用B的私钥解密。如果数据量少可用非对称加密算法直接加密。
可以这样实现:A传送数据给B时,A随机生成1个密钥(约定好的对称加密算法的密钥),使用约定好的对称加密算法和这个密钥对数据进行加密,然后使用B的公钥对secretKey进行加密,将加密后的数据连同加密后的secretKey发送给B,B使用自己的私钥对加密后的密钥进行解密。再利用解密出来的密钥对密文数据进行解密。
如下所图示:
2、用作签名:A使用A的私钥对要签名的数据加密,B使用A的公钥对数据进行解密。
可以这样实现:A对要传送的内容进行哈希计算如MD5,SHA256等。然后对哈希值进行签名,将签名值和要传送给的内容传送给B,B用A的公钥对签名值进行解密,再将传送过来的内容进行同样算法的哈希计算,得到一个哈希值,将此哈希值与解密出的哈希值进行对比,如果一样说明传送内容未被篡改。
如下所图示:
3、带签名加密:如果数据量大,则采用对称加密算法加密数据,非对称加密算法对 “对称加密算法使用的密钥” 进行加密
A生成一个密钥secretKey用作对数据进行对称加密,用secretKey对数据进行加密。然后使用A的私钥对密文数据进行哈希计算,得到一个签名值,再使用B的公钥将密钥secretKey进行加密。将要传送的密文,加密后的签名值,加密后的密钥,一并发给B。B使用A的公钥对签名值进行解密,得到解密后的签名值,再使用与A相同的哈希算法对接收到的密文进行哈希计算,将得到的哈希值与解密后的签名值比较,如果相同则说明传送的密文内容未被篡改,使用B的私钥对加密的secretKey进行解密,再使用解密后的密钥对密文数据进行解密。
如下所图示: