1、数字信封的概念
数字信封,英文是Digital Envelope,望文生义,就可以知道将需要传递的数据,通过加密的方式包裹起来。
数字信封的准确定义,在《PKCS #7: Cryptographic Message Syntax Standard》标准的第10章中给出,原话是:“加密的内容,以及对内容解密的密钥被加密后的结果,这两者组合起来后,被称为数字信封”。
数字信封的组成如下图所示:
从上图可以看出,数字信封和我们日常生活中使用的信封,还是不一样的:日常生活中的信封,仅仅指包裹信件的外壳,不包含信件(内容);但数字信封其实是包含内容的。
2、数字信封的两种密钥
从概念介绍,我们可以看到数字信封其实有两种密钥:
密钥1:用于对内容进行加密和解密;
密钥2:用于对密钥1进行加密和解密。
由于需要处理的内容有可能很长,一般密钥1使用对称密钥,而且密钥1往往是临时(随机)生成;
密钥2则可以是对称密钥,也可以是非对称密钥:
如果是1对1发送信息,建议密钥2使用非对称密钥,发送者用公钥加密,接收者用私钥解密;
如果是1对多发送信息,建议密钥2使用对称密钥,发送者用对称密钥加密,接收者也用同样的密钥解密。
3、数字信封的通信原理
说到这里,即使不再介绍,大家也能猜出数字信封的通信原理了。
我还是画蛇添足,把数字信封的通信原理画出来(这里密钥1是对称密钥,密钥2则为最常用的非对称密钥):
4、Java语言实现数字信封
这里,我们使用JDK提供的加解密功能,对称加密算法为AES,非对称加密算法为RSA。