答案 0 :(得分: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
解码流程如下: 读入标签,长度,值序列。
从Tag获取
长度:
值:以当前TLV级别读取的实际值。 如果这是构造的数据(如序列),则值将包含TLV的内部级别。
在标准的最后(http://www.itu.int/ITU-T/studygroups/com17/languages/X.690-0207.pdf)有一个图像显示多级TLV,也许可以更好的帮助你了解BER。
阅读标准后,最好的方法是: 1)找一些GUI查看器来查看一些BER证书文件,以便熟悉它。谷歌“ASN.1查看器”找到。 2)开始查看代码https://github.com/chrisridd/asn1-dump/blob/master/berd.m
答案 1 :(得分:0)
怎么样? http://tlve.sourceforge.net/
Apple的Tokend似乎也很有用:http://www.opensource.apple.com/source/Tokend/Tokend-36720/PIV/TLV.cpp
来自sourceforge的jayacard是另一个处理这个问题的项目,现在似乎已经放弃了,但是来源就在这里:http://www.codeforge.com/read/7149/tlv.c__html