文档

Java™ 教程
隐藏目录
输入并转换编码的公钥字节
路径:Java SE中的安全特性
课程:生成和验证签名
章节:验证数字签名

输入并转换编码的公钥字节

接下来,VerSig 需要从指定为第一个命令行参数的文件中导入编码的公钥字节,并将其转换为PublicKey。需要PublicKey,因为这是Signature initVerify 方法所需的,以初始化用于验证的Signature对象。

首先,读取编码的公钥字节。

FileInputStream keyfis = new FileInputStream(args[0]);
byte[] encKey = new byte[keyfis.available()];  
keyfis.read(encKey);

keyfis.close();

现在字节数组encKey中包含了编码的公钥字节。

您可以使用KeyFactory类来根据其编码实例化DSA公钥。 KeyFactory类提供了不透明密钥(类型为Key)和密钥规范之间的转换,密钥规范是底层密钥材料的透明表示。使用不透明密钥,您可以获取算法名称、格式名称和编码的密钥字节,但无法获取密钥材料,例如,可能由密钥本身和用于计算密钥的算法参数组成。 (请注意,因为PublicKey扩展了Key,所以它本身也是一个Key。)

因此,首先您需要一个密钥规范。您可以通过以下方式获取一个,假设该密钥是根据X.509标准进行编码的,例如,如果密钥是由SUN提供的内置DSA密钥对生成器生成的,则为真:

X509EncodedKeySpec pubKeySpec = new X509EncodedKeySpec(encKey);

现在您需要一个能够与DSA密钥一起工作的KeyFactory对象来进行转换。

KeyFactory keyFactory = KeyFactory.getInstance("DSA", "SUN");

最后,您可以使用KeyFactory对象从密钥规范生成PublicKey

PublicKey pubKey =
    keyFactory.generatePublic(pubKeySpec);

上一页: 准备初始程序结构
下一页: 输入签名字节