6

我打算从智能卡响应中解析 BER-TLV 格式来解释数据。

它类似于JACCAL,但在 Objective-C 或 C++ 中

任何人都可以参考任何开源项目或任何参考来做到这一点吗?

4

2 回答 2

4

这是一个解码 ASN.1 BER 格式的项目。 https://github.com/chrisridd/asn1-dump/

位于此文件中的主要逻辑: https ://github.com/chrisridd/asn1-dump/blob/master/berd.m

如果有足够的时间,阅读标准后编写自己的解码器并不难: http: //www.itu.int/ITU-T/studygroups/com17/languages/X.690-0207.pdf http:/ /luca.ntop.org/Teaching/Appunti/asn1.html

解码流程是这样的:读取标签、长度、值序列。

  • 从标签你会得到

    • 数据类,通常是通用的(标准中的预定义类型,如“Boolean”、“Sequence”...)和特定于上下文的(以区分具有相同类型的不同字段)。
    • 原始(如布尔和整数)或构造(通常是序列)。因为构造类型可以包含原始类型或构造类型。可能需要递归解码。
    • 标签号,确定数据类型(布尔?整数?位串?)
  • 长度:

    • 确定要解码的内容的长度(可能需要递归解码)。
    • 长度有两种形式(短和长)。你最好两个都支持。
  • 值:在当前 TLV 级别中读取的实际值。如果这是一个构造数据(如序列),则该值将包含 TLV 的内部级别。

在标准的末尾(http://www.itu.int/ITU-T/studygroups/com17/languages/X.690-0207.pdf)有一个图像显示多级TLV,也许可以更好地帮助你理解误码率。

阅读标准后,最好的方法是: 1)找一些 GUI 查看器查看一些 BER 证书文件,熟悉它。谷歌“ASN.1 查看器”找到。2)开始看代码https://github.com/chrisridd/asn1-dump/blob/master/berd.m

于 2012-11-30T19:21:22.250 回答
0

tlve怎么样?http://tlve.sourceforge.net/

苹果的 Tokend 似乎也很有用:http ://www.opensource.apple.com/source/Tokend/Tokend-36720/PIV/TLV.cpp

sourceforge 上的 jayacard 是另一个处理此问题的项目,现在似乎已被废弃,但来源在这里: http: //www.codeforge.com/read/7149/tlv.c__html

于 2012-11-25T14:08:49.043 回答