java – 用于Yubico OpenPGP智能卡的PGP数据加密
我试图在
Java应用程序中基于Yubikey NEO OpenPGP智能卡小程序实现PGP加密.似乎是一个黑暗的艺术,并不容易google这个东西,但这里是我到目前为止:
>卡被初始化,使用gpg工具生成密钥.它通常工作.我的公钥是.asc格式,并将其加载到org.bouncycastle.openpgp中 val pgpAID = bytes(0xD2,0x76,0x00,0x01,0x24,0x01) val answer = cardChannel.transmit(CommandAPDU(0x00,0xA4,0x04,pgpAID)) >成功地将正确的PIN提供给卡 val pin = "123456" return bytes(0x00,0x20,0x82,pin.length) + pin.toByteArray(Charsets.UTF_8) >发送准成功(见下文)解密命令 bytes(0x00,0x2a,0x80,0x86,data.size) + data + bytes(0x00) 当data =“xxxx”.toByteArray()时,结果为SW = 9000(= success),但不返回任何数据.这是一个天真的测试,因为第52页的OpenPGP applet documentation提到
我不知道如何加密数据并获得PKCS#1格式. 我也尝试阅读Yubico OpenPGP card implementation tests,但它只提供另一个“失败”的例子(第196行).我尝试运行,但结果是不同的:测试期望SW = 0050(表示异常?),我得到的是SW = 6f00(根据this document没有精确的诊断). 我创建了一个GitHub repository与整个代码.它写在科特林,但应该很容易阅读. 解决方法
你的问题有点困惑,但我很确定你想使用与智能卡上的RSA私钥相对应的RSA公钥来创建PGP加密的消息,然后使用智能卡上的RSA私钥(帮助)解密它们. PGP(像其他一切)使用混合加密,所以相关部分中的PGP加密消息包括:
>使用适当的对称算法(如TDES或AES)使用随机生成的工作密钥加密实际消息,称为K 您不需要执行加密步骤,因为执行标准的任何软件都可以执行加密步骤,包括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 注意段落开始
似乎是一个不同的选择,而不是PGP AFAICS,在上一页描述
所以忽略它. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- java – Joda时间 – 两个日期之间的月份差异
- 微信小程序 springboot后台如何获取用户的openid
- java – XMPP vs SIP比较
- Java基础—运算符与引用数据类型Scanner、Random
- Java:JProgressBar(或等效的)在JTabbedPane选项卡标题中
- Java BufferedImage,写入底层栅格,像素在最终图像中出现偏移
- java – Apache POI,创建新单元格将覆盖行样式
- spring boot自定义配置源操作步骤
- java – JSplitPane:有没有办法显示/隐藏其中一个窗格?
- Java – Decimal Format.parse返回具有指定小数位数的doubl