生成公钥和私钥

为了能够创建数字签名,您需要一个私钥。 (为了验证签名的真实性,需要使用其相应的公共密钥.)

在某些情况下,密钥对(私钥和相应的公钥)已经在文件中可用。在这种情况下,程序可以导入并使用私钥进行签名,如弱点和替代方案所示。

在其他情况下,程序需要生成密钥对。通过使用KeyPairGenerator类生成密钥对。

在此示例中,您将为数字签名算法(DSA)生成一个公钥/私钥对。您将生成一个 1024 位 Long 度的密钥。

生成密钥对需要几个步骤:

创建密钥对生成器

第一步是获得一个密钥对生成器对象,用于生成 DSA 签名算法的密钥。

与所有引擎类一样,为特定类型的算法获取KeyPairGenerator对象的方法是在KeyPairGenerator类上调用getInstance静态工厂方法。此方法有两种形式,两种形式都具有String algorithm第一个参数;一种形式还具有String provider第二个参数。

因此,调用者可以选择指定提供者的名称,这将保证所请求算法的实现来自命名的提供者。本课的示例代码始终指定 JDK 中内置的默认 SUN 提供程序。

将以下语句放在

else try {

上一步中创建的文件中的准备初始程序结构行:

KeyPairGenerator keyGen = KeyPairGenerator.getInstance("DSA", "SUN");

初始化密钥对生成器

下一步是初始化密钥对生成器。所有密钥对生成器都共享密钥大小和随机性源的概念。 KeyPairGenerator类具有一个initialize方法,该方法接受这两种类型的参数。

DSA 密钥生成器的密钥大小是密钥 Long 度(以位为单位),您将其设置为 1024.

随机性的来源必须是SecureRandom类的实例,该类提供了加密强度高的随机数生成器(RNG)。有关SecureRandom的更多信息,请参见SecureRandom API 规范Java 密码学体系结构参考指南

以下示例请求使用内置 SUN 提供程序提供的 SHA1PRNG 算法的SecureRandom实例。然后,该示例将此SecureRandom实例传递给密钥对生成器初始化方法。

SecureRandom random = SecureRandom.getInstance("SHA1PRNG", "SUN");
keyGen.initialize(1024, random);

某些情况需要强随机值,例如在创建高价值且 Long 期存在的机密(如 RSA 公钥和私钥)时。为了帮助指导应用程序选择合适的强SecureRandom实现,从 JDK 8 开始,Java 发行版在java.security.Security类的securerandom.strongAlgorithms属性中包括了已知的强SecureRandom实现的列表。创建此类数据时,应考虑使用SecureRandom.getInstanceStrong(),因为它获得了已知的强大算法的实例。

生成密钥对

最后一步是生成密钥对并将密钥存储在PrivateKeyPublicKey对象中。

KeyPair pair = keyGen.generateKeyPair();
PrivateKey priv = pair.getPrivate();
PublicKey pub = pair.getPublic();
首页