由于历史原因,Java安全相关的API放在了两个不同的包里面,即java.security和javax.crypto包。
- java.security包包含不受出口控制限制的一些安全功能,比如签名(Signature)以及消息摘要(MessageDigest)。包java.security为安全框架提供类和接口,包括那些实现了可方便配置的、细粒度的访问控制安全架构的类。
- javax.crypto包包含着受出口控制限制的加解密类(Cipher)以及密钥协商(KeyAgreement)。包javax.crypto为加密操作提供类和接口。在此包中定义的加密操作包括加密、密钥生成和密钥协商,以及消息验证码(Message Authentication Code, MAC)生成。加密支持包括对称密码、不对称密码、块密码和流密码。此包还支持安全流和密封的对象。包javax.crypto中提供的许多类都是基于提供者的。该类本身定义可以写入应用程序的编程接口。然后可由独立的第三方供应商编写实现本身,并根据需要无缝嵌入。因此,应用程序开发人员可以利用任意数量基于提供者的实现,而无须添加或重写代码。
我们通过JCA进行加解密编程,主要是调用包java.security和javax.crypto中的类或接口函数。