KeyPairGenerator 类用于生成公钥和私钥对。密钥对生成器是使用 getInstance 工厂方法(返回一个给定类的实例的静态方法)构造的。

特定算法的密钥对生成器可以创建能够与此算法一起使用的公钥/私钥对。它还可以将特定于算法的参数与每个生成的密钥关联。

有两种生成密钥对的方式:与算法无关的方式和特定于算法的方式。两种方式的唯一区别在于对象的初始化:

  • 与算法无关的初始化

    所有的密钥对生成器遵循密钥大小和随机源的概念。对于不同的算法,密钥大小的解释也不相同(例如,对于 DSA 算法,密钥大小对应于模的长度)。此 KeyPairGenerator 类有一个 initialize 方法,该方法带有两个通用的共享类型的参数。还有一个只带有 keysize 参数的方法,它使用以最高优先级安装的提供者的 SecureRandom 实现作为随机源。(如果任何安装的提供者都不提供 SecureRandom 的实现,则使用系统提供的随机源。)

    因为调用上述与算法无关的 initialize 方法时没有指定其他参数,所以由提供者决定如何处理与每个密钥关联的特定于算法的参数(如果有)。

    如果算法为 DSA 算法,密钥大小(模大小)为 512、768 或 1024,那么 Sun 提供者对 pq 和 g 参数使用一组预计算值。如果模大小不是上述值之一,则 Sun 提供者创建一个新的参数集合。其他提供者可能具有供更多模大小(不仅仅是上文提及的那三个)使用的预计算参数集合。其他提供者也可能没有任何预计算参数列表,而总是创建新的参数集合。

  • 特定于算法的初始化

    对于特定于算法的参数集合已存在的情况(例如,DSA 中所谓的公用参数),有两个 initialize 方法具有 AlgorithmParameterSpec 参数。其中一个方法还有一个 SecureRandom 参数,而另一个方法使用以最高优先级安装的提供者的 SecureRandom 实现作为随机源。(如果任何安装的提供者都不提供 SecureRandom 的实现,则使用系统提供的随机源。)

每个提供者都必须提供(并记录)默认的初始化,以防客户端没有显式初始化 KeyPairGenerator(通过调用 initialize 方法)。例如,Sun 提供者使用 1024 位的默认模大小(密钥大小)。

注意,由于历史原因,此类是抽象类,是从 KeyPairGeneratorSpi 扩展的。应用程序开发人员只需注意在此 KeyPairGenerator 类中定义的方法;超类中的所有方法是供加密服务提供者使用的,这些加密服务提供者希望提供自己的密钥对生成器实现。

version 1.59, 04/21/06
See also java.security.spec.AlgorithmParameterSpec
 
Constructors
protected KeyPairGenerator(String algorithm)

zh_cn

为指定的算法创建 KeyPairGenerator 对象。

algorithm
zh_cn

算法的标准字符串名称。有关标准算法名称的信息,请参阅 Java Cryptography Architecture API Specification & Reference 中的附录 A。

 
Methods
public KeyPair generateKeyPair()

zh_cn

生成一个密钥对。

如果此 KeyPairGenerator 没有被显式初始化,特定于提供者的默认值将用于所生成密钥的大小和其他(特定于算法的)值。

每次调用此方法都将生成新的密钥对。

此方法在功能上等同于 generateKeyPair

return
zh_cn

生成的密钥对

 
final public KeyPair genKeyPair()

zh_cn

生成密钥对。

如果此 KeyPairGenerator 没有被显式初始化,特定于提供者的默认值将用于所生成密钥的大小和其他(特定于算法的)值。

每次调用此方法都将生成新的密钥对。

此方法在功能上等同于 generateKeyPair

return
zh_cn

生成的密钥对

since 1.2
 
public void initialize(int keysize)

zh_cn

初始化确定密钥大小的密钥对生成器,使用默认的参数集合,并使用以最高优先级安装的提供者的 SecureRandom 实现作为随机源。(如果任何安装的提供者都不提供 SecureRandom 的实现,则使用系统提供的随机源。)

keysize
zh_cn

密钥大小。它是特定于算法的度量(如模长度),以位数为单位指定。

Throws InvalidParameterException:

zh_cn

如果 keysize不受此 KeyPairGenerator 对象支持。

 
public void initialize(int keysize, SecureRandom random)

zh_cn

使用给定的随机源(和默认的参数集合)初始化确定密钥大小的密钥对生成器。

keysize
zh_cn

密钥大小。它是特定于算法的度量(如模长度),以位数为单位指定。

random
zh_cn

随机源。

Throws InvalidParameterException:

zh_cn

如果 keysize不受此 KeyPairGenerator 对象支持。

since 1.2
 
public void initialize(AlgorithmParameterSpec params) throws InvalidAlgorithmParameterException

zh_cn

初始化密钥对生成器,使用指定参数集合,并使用以最高优先级安装的提供者的 SecureRandom 的实现作为随机源。(如果任何安装的提供者都不提供 SecureRandom 的实现,则使用系统提供的随机源。)

已将此具体方法添加到以前定义的这个抽象类中。此方法调用 KeyPairGeneratorSpi 的 initialize 方法,为它传递 params 和随机源(从以最高优先级安装的提供者获得;如果任何已安装的提供者都不能提供,则由系统提供)。如果没有被提供者重写,则该 initialize 方法总是抛出 UnsupportedOperationException。

params
zh_cn

用于生成密钥的参数集合。

Throws InvalidAlgorithmParameterException:

zh_cn

如果给定的参数不适合此密钥对生成器。

since 1.2
 
public void initialize(AlgorithmParameterSpec params, SecureRandom random) throws InvalidAlgorithmParameterException

zh_cn

使用给定参数集合和随机源初始化密钥对生成器。

已将此具体方法添加到以前定义的这个抽象类中。此方法调用 KeyPairGeneratorSpi 的 initialize 方法,为它传递 params 和 random。如果没有被提供者重写,则该 initialize 方法总是抛出 UnsupportedOperationException。

params
zh_cn

用于生成密钥的参数集合。

random
zh_cn

随机源。

Throws InvalidAlgorithmParameterException:

zh_cn

如果给定的参数不适合此密钥对生成器。

since 1.2
 
Properties
public String getAlgorithm()

zh_cn

返回此密钥对生成器算法的标准名称。有关标准算法名称的信息,请参阅 Java Cryptography Architecture API Specification & Reference 中的附录 A。

return
zh_cn

算法的标准字符串名称。

 
public static KeyPairGenerator getInstance(String algorithm) throws NoSuchAlgorithmException

zh_cn

返回生成指定算法的 public/private 密钥对的 KeyPairGenerator 对象。

此方法从首选 Provider 开始遍历已注册安全提供者列表。返回封装 KeyPairGeneratorSpi 实现的新 KeyPairGenerator 对象,该实现取自第一个支持指定算法的 Provider。

注意,可以通过 Security.getProviders() 方法获取已注册提供者列表。

algorithm
zh_cn

算法的标准字符串名称。有关标准算法名称的信息,请参阅 Java Cryptography Architecture API Specification & Reference 中的附录 A。

return
zh_cn

新的 KeyPairGenerator 对象。

Throws NoSuchAlgorithmException:

zh_cn

如果没有 Provider 支持指定算法的 KeyPairGeneratorSpi 实现。

See also java.security.Provider
 
public static KeyPairGenerator getInstance(String algorithm, String provider) throws NoSuchAlgorithmExceptionNoSuchProviderException

zh_cn

返回生成指定算法的 public/private 密钥对的 KeyPairGenerator 对象。

返回一个封装 KeyPairGeneratorSpi 实现的新 KeyPairGenerator 对象,该实现取自指定提供者。指定提供者必须在安全提供者列表中注册。

注意,可以通过 Security.getProviders() 方法获取已注册提供者列表。

algorithm
zh_cn

算法的标准字符串名称。有关标准算法名称的信息,请参阅 Java Cryptography Architecture API Specification & Reference中的附录 A。

provider
zh_cn

提供者的字符串名称。

return
zh_cn

新的 KeyPairGenerator 对象。

Throws NoSuchAlgorithmException:

zh_cn

如果指定算法的 KeyPairGeneratorSpi 实现不能从指定提供者获得。

Throws NoSuchProviderException:

zh_cn

如果指定提供者未在安全提供者列表中注册。

Throws IllegalArgumentException:

zh_cn

如果提供者的名称为 null 或空。

See also java.security.Provider
 
public static KeyPairGenerator getInstance(String algorithm, Provider provider) throws NoSuchAlgorithmException

zh_cn

返回生成指定算法的 public/private 密钥对的 KeyPairGenerator 对象。

返回一个封装 KeyPairGeneratorSpi 实现的新 KeyPairGenerator 对象,该实现取自指定 Provider 对象。注意,指定 Provider 对象无需在提供者列表中注册。

algorithm
zh_cn

算法的标准字符串名称。有关标准算法名称的信息,请参阅 Java Cryptography Architecture API Specification & Reference中的附录 A。

provider
zh_cn

提供者。

return
zh_cn

新的 KeyPairGenerator 对象。

Throws NoSuchAlgorithmException:

zh_cn

如果指定算法的 KeyPairGeneratorSpi 实现不能从指定提供者对象获得。

Throws IllegalArgumentException:

zh_cn

如果指定提供者为 null。

since 1.4
See also java.security.Provider
 
final public Provider getProvider()

zh_cn

返回此密钥对生成器对象的提供者。

return
zh_cn

返回此密钥对生成器对象的提供者

java.security KeyPairGenerator的更多相关文章

  1. Java Security:Java加密框架(JCA)简要说明

    加密服务总是关联到一个特定的算法或类型,它既提供了密码操作(如Digital Signature或MessageDigest),生成或供应所需的加密材料(Key或Parameters)加密操作,也会以 ...

  2. java security

    安全性是Java应用程序的非功能性需求的重要组成部分,如同其它的非功能性需求一样,安全性很容易被开发人员所忽略.当然,对于Java EE的开发人员来说,安全性的话题可能没那么陌生,用户认证和授权可能是 ...

  3. 基础篇:java.security框架之签名、加密、摘要及证书

    前言 和前端进行数据交互时或者和第三方商家对接时,需要对隐私数据进行加密.单向加密,对称加密,非对称加密,其对应的算法也各式各样.java提供了统一的框架来规范(java.security)安全加密这 ...

  4. java.security.spec.InvalidKeySpecException: java.security.InvalidKeyException: IOException : DerInputStream.getLength(): lengthTag=111, too big.

    RSA用私钥签名的时候发现报错,删除以下内容即可 -----BEGIN PRIVATE KEY----- -----END PRIVATE KEY----- import org.apache.com ...

  5. 解決 java.security.cert.CertificateException: Certificates does not conform to algorithm constraints

    找到 jre/lib/security/java.security 将 jdk.certpath.disabledAlgorithms=MD2, DSA, RSA keySize < 2048 ...

  6. Java Security:keytool工具使用说明

    Keytool用法说明 Keytool是一个key与cert的管理工具.使用keytool可以管理public key.private key,以及与key之相关的certificate. 1.com ...

  7. Java Se:Java Security

    Java API中有很多都使用了SecurityManager,这到底是什么玩意?最近看公司的产品的源码,也有不少SecurityManager.AccessControlContext等相关的代码, ...

  8. AES加密时的 java.security.InvalidKeyException: Illegal key size 异常

    程序代码 // 设置加密模式为AES的CBC模式 Cipher cipher = Cipher.getInstance("AES/CBC/NoPadding"); SecretKe ...

  9. Java Security: Illegal key size or default parameters?

    来自:http://stackoverflow.com/questions/6481627/java-security-illegal-key-size-or-default-parameters I ...

随机推荐

  1. 在内网中 vue项目添加ECharts图表插件

    原文地址:https://www.cnblogs.com/aknife/p/11753854.html 最近项目中要使用到图表 但是项目在内网中无法直接使用命令安装 然后我在外网中弄个vue的项目(随 ...

  2. 3.02定义常量之const

    [注:本程序验证是使用vs2013版] #include <stdio.h> #include <stdlib.h> #include <string.h> #pr ...

  3. Python爬虫快速上手教程

    1 这个是什么        整理Python中requests常用的API 2 代码 from bs4 import BeautifulSoup import requests import re ...

  4. 【洛谷 P5357】 【模板】AC自动机(二次加强版)(AC自动机,差分)

    每次匹配都不停跳fail显然太慢了,于是在每个节点和fail指向的点连一条边,构成一棵树,在这棵树上差分一下就好了. AC自动机 就这个算法而言其实没用想象中那么难. #include <cst ...

  5. fatal: 不是一个有效的对象名:'master'。

    听说git比svn的branch功能好,所以装了个msysgit玩.执行完了git init操作后想建branch,用git branch develop命令,结果报错,说 fatal: Not a ...

  6. vue-cli 3.0 安装

    一.安装vue-cli 脚手架命令 npm install -g vue-cli   适用于vue-cli 2.0 npm install -g @vue/cli 适用于vue-cli 3.0 卸载命 ...

  7. <P>标签是什么?怎么用!

    <P>标签它是一个段落标签,它和<br>标签不一样.会自行起一行段落,并且可以作为一个盒子来使用.可以单独定义它. 比如下图: <p>这个就是一个段落</p& ...

  8. DDL 操作数据库

    DDL 操作数据库:常用的操作 CRUD 一.C(create)创建 1.创建数据库 create database 数据库名称; 2.创建数据库,判断是否存在,再创建(如果存在,就不再创建) cre ...

  9. 视觉AI风口一触即发,虹软AI沙龙点金深圳

    7月26日,虹软AI沙龙在深圳湾科技生态园空间举办.AI沙龙是基于虹软视觉开放平台的开发者交流沙龙,旨在通过分享最新的实战案例,帮助开发者解决技术及落地难题,让技术更贴近实用场景. 本次活动中,深圳市 ...

  10. 【新手可看懂】ubuntu配置appium环境

    1.node安装: 在node官网:https://nodejs.org/en/download/ 下载对应的安装包(这里建议下载最新的版本)下载好后放在liunx指定路径下 我这里放到opt这个文件 ...