java.security.spec.KeySpec
类型
接口
已知实现类
DESedeKeySpec, DESKeySpec, DHPrivateKeySpec, DHPublicKeySpec, DSAPrivateKeySpec,
DSAPublicKeySpec, ECPrivateKeySpec, ECPublicKeySpec, EncodedKeySpec, PBEKeySpec,
PKCS8EncodedKeySpec, RSAMultiPrimePrivateCrtKeySpec, RSAPrivateCrtKeySpec, RSAPrivateKeySpec,
RSAPublicKeySpec, SecretKeySpec, X509EncodedKeySpec
说明
组成加密密钥的密钥内容的(透明)规范。
如果密钥存储在硬件设备上,则其规范可以包含有助于标识该设备上的密钥的信息。
用特定于算法的方法或独立于算法的编码格式(例如,ASN.1)可以指定密钥。例如,DSA 专用密钥可以由其组件 x、p、q 和 g 指定(请参见 DSAPrivateKeySpec),或使用其 DER 编码指定(请参见 PKCS8EncodedKeySpec)。
此接口不包含任何方法或常量。它仅用于将所有密钥规范分组并为其提供类型安全。所有密钥规范都必须实现此接口。
java.security.KeyFactory
类型
类
常用方法
PrivateKey generatePrivate(KeySpec keySpec)
根据所提供的密钥规范(密钥材料)生成私钥对象。
PublicKey generatePublic(KeySpec keySpec)
根据所提供的密钥规范(密钥材料)生成公钥对象。
static KeyFactory getInstance(String algorithm)
生成实现指定算法的 KeyFactory 对象。
static KeyFactory getInstance(String algorithm, Provider provider)
为指定提供程序中的指定算法生成 KeyFactory 对象。
static KeyFactory getInstance(String algorithm, String provider)
为指定提供程序中的指定算法生成 KeyFactory 对象。
String getAlgorithm()
获取与此 KeyFactory 相关联的算法的名称。
说明
密钥工厂是用来将 keys(Key 类型的不透明加密密钥)转换成 key 规范(基础密钥材料的透明表示),反之亦然。
密钥工厂是双向的。也就是说,它们允许根据一个给定的密钥规范(密钥材料)来建造一个不透明的密钥对象,或检索以合适格式表示的密钥对象的基础密钥材料。
对于同一个密钥可以存在多个兼容的密钥规范。例如,一个 DSA 公钥可以使用 DSAPublicKeySpec 或 X509EncodedKeySpec 指定。密钥工厂可以用来在兼容的密钥规范之间转换。
java.security.Security
类型
类
说明
此类集中了所有的安全属性和常见的安全方法。其主要用途之一是管理提供程序
常用方法
static int addProvider(Provider provider)
将提供程序添加到下一个可用位置。
static Provider getProvider(String name)
返回使用指定的名称安装的提供程序(如果有)。
static Provider[] getProviders()
返回包含所有已安装的提供程序的数组。
static void removeProvider(String name)
移除带有指定名称的提供程序。
java.security.Signature
类型
抽象类
说明
此 Signature 类用来为应用程序提供数字签名算法功能。数字签名用来保证数字数据的真实性和完整性。
在所有算法当中,数字签名可以是 NIST 标准的 DSA,它使用 DSA 和 SHA-1。可以将使用 SHA-1 消息摘要算法的 DSA 算法可指定为 SHA1withDSA。
如果使用 RSA,对消息摘要算法将有多种选择,因此,可以将签名算法指定为 MD2withRSA、MD5withRSA 或 SHA1withRSA。没有默认的算法名称,所以必须为其指定名称。
与 Java Security 中其他基于算法的类一样,Signature 提供了与实现无关的算法,因此,调用方(应用程序代码)
会请求特定的签名算法并将它传回给已被正确初始化的 Signature 对象。如果需要,还可以通过特定的提供程序请求特定的算法。请参见 getInstance 方法。
因此,有以下两种请求 Signature 算法对象的方法:仅指定算法名称,或者既指定算法名称又指定包提供程序。
①如果仅指定了算法名称,则系统将确定环境中是否有所请求的算法实现,是否不止一个,是否为首选实现。
②如果既指定了算法名称又指定了包提供程序,则系统将确定在请求的包中是否有该算法的实现;如果没有,则抛出异常。
Signature 对象可用来生成和验证数字签名。
使用 Signature 对象签名数据或验证签名包括以下三个阶段:
1、初始化
初始化验证签名的公钥(请参见 initVerify),或使用初始化签署签名的私钥(也可以选择“安全随机数生成器”),(请参见 initSign(PrivateKey) 和 initSign(PrivateKey, SecureRandom))。
2、更新
根据初始化类型,这可更新要签名或验证的字节。请参见 update 方法。
3、签署或验证所有更新字节的签名。
请参见 sign 方法和 verify 方法。
常用方法之创建对象
static Signature getInstance(String algorithm)
生成实现指定摘要算法的 Signature 对象。
static Signature getInstance(String algorithm, Provider provider)
如果提供程序能够提供这样的算法,则将生成一个实现指定算法的 Signature 对象,作为指定提供程序提供的对象。
static Signature getInstance(String algorithm, String provider)
如果提供程序能够提供这样的算法,则将生成一个实现指定算法的 Signature 对象,作为指定提供程序提供的对象。
常用方法之初始化
void initSign(PrivateKey privateKey)
初始化此用于签名的对象。
void initSign(PrivateKey privateKey, SecureRandom random)
初始化此用于签名的对象。
void initVerify(Certificate certificate)
使用来自给定证书的公钥初始化此用于验证的对象。
void initVerify(PublicKey publicKey)
初始化此用于验证的对象。
常用方法之更新
void update(byte b)
更新要由字节签名或验证的数据。
void update(byte[] data)
使用指定的字节数组更新要签名或验证的数据。
void update(byte[] data, int off, int len)
从指定的偏移量开始,使用指定的字节数组更新要签名或验证的数据。
void update(ByteBuffer data)
使用指定的 ByteBuffer 更新要签名或验证的数据。
常用方法之签署或验证所有更新字节的签名
byte[] sign()
返回所有已更新数据的签名字节。
int sign(byte[] outbuf, int offset, int len)
完成签名操作并从 offset 开始,将得到的签名字节存储在提供的缓冲区 outbuf 中。
boolean verify(byte[] signature)
验证传入的签名。
boolean verify(byte[] signature, int offset, int length)
从指定的偏移量开始,验证指定的字节数组中传入的签名。