首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DoD CAC ADPU命令

DoD CAC ADPU命令
EN

Stack Overflow用户
提问于 2014-05-17 01:52:26
回答 1查看 871关注 0票数 3

我正在尝试允许对我正在编写的DoD应用程序进行Java注册/认证。我正在使用javax.smartcario包来读取卡。我可以成功连接并读取GUID。我要查找的信息是卡上的用户名(LAST.FIRST.M.123456789)。我正在使用以下AID,它使我能够访问GUID和证书:

代码语言:javascript
复制
byte[] aid = {(byte) 0xA0, 0x00, 0x00, 0x03, 0x08, 0x00, 0x00, 0x10, 0x00};

卡上是否有不同的应用程序来存储用户名?用户名是否以某种方式嵌入到证书中?谢谢!

编辑

我正在尝试根据APDU命令响应生成证书,但是抛出了一个异常。

代码语言:javascript
复制
 // X.509 Certificate for PIV auth command
 byte[] apdu = {0x00, (byte)0xCB, 0x3F, 
            (byte)0xFF, 0x05, 0x5C, 0x03, 0x5F, (byte)0xC1, 0x05};
 answer = channel.transmit(new CommandAPDU(apdu));

 CertificateFactory cf = CertificateFactory.getInstance("X.509");
 X509Certificate cert = (X509Certificate)cf.generateCertificate(
                 new ByteArrayInputStream(answer.getBytes()));

引发以下异常:

代码语言:javascript
复制
java.security.cert.CertificateException: Could not parse certificate: java.io.IOException: Empty input

字节数组不为空。谢谢!

EN

回答 1

Stack Overflow用户

发布于 2014-06-13 12:17:02

您必须同时查看0x70和0x71标记。

0x70包含cert数据,0x71告诉您格式(过于简化的情况是0未压缩,1为压缩(gzip))

此外,该值可能大于单个255字节的缓冲区。在将一个有效的byte[]传入X509“工厂”之前,您还需要几行代码。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23701657

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档