你的问题有点困惑,但我很确定你想使用与智能卡上的RSA私钥相对应的RSA公钥来创建PGP加密的消息,然后使用智能卡上的RSA私钥(帮助)解密它们. PGP(像其他一切)使用混合加密,所以相关部分中的PGP加密消息包括:
>使用适当的对称算法(如TDES或AES)使用随机生成的工作密钥加密实际消息,称为K
>工作密钥K加上由RSA使用收件人的公开密钥加密的一些元数据和由原来的PKCS#1标准定义的填充,现在正式称为RSAES-PKCS1-v1_5,但是仍然被广泛地称为PKCS1.
您不需要执行加密步骤,因为执行标准的任何软件都可以执行加密步骤,包括GnuPG或BouncyCastle的bcpg库.如果你想自己做,可能是使用假的K测试数据,没有真实的消息,你需要做填充和RSA模幂运算;在Java中,至少Oracle或openjdk Java与标准的加密提供程序,您可以使用通常使用.getInstance(“RSA / ECB / PKCS1Padding”)获取的javax.crypto.Cipher.
“PKCS1”加密填充(用于RSA)如该文档的第52页底部和第53页的顶部所述,尽管不是格式与current OpenPGP spec(及更早版本)相同,但是引用和有效地相同到near-current PKCS#1 spec(和更早),所有这些都说是:
>一个字节00
>一个字节02
>足够的字节非零随机,使结果正确的长度和安全
>一个字节00
>“明文”,PGP加密实际上是the PGP spec规定的工作对称密钥K格式.
注意段落开始
In case of the AES algorithm
似乎是一个不同的选择,而不是PGP AFAICS,在上一页描述
By option (announced in Extended capabilities) the card supports the decryption of a plain
text with an AES-key stored in a special DO (D5). This is useful if no certificate or public
key exists and the external world has a common secret with the card.
所以忽略它.