Importing 和转换编码的公钥字节
接下来,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);
现在,您需要一个KeyFactory
对象进行转换。该对象必须是与 DSA 密钥一起使用的对象。
KeyFactory keyFactory = KeyFactory.getInstance("DSA", "SUN");
最后,您可以使用KeyFactory
对象根据密钥规范生成PublicKey
。
PublicKey pubKey =
keyFactory.generatePublic(pubKeySpec);