首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用ASN1进行ASN1解析

使用ASN1进行ASN1解析
EN

Stack Overflow用户
提问于 2015-07-14 13:39:34
回答 1查看 1.8K关注 0票数 0

我想我明白ASN.1解析背后的基本想法了。遍历字节,解释它们并对它们做一些有用的事情。唉,我被困在执行上了。

苹果没有示例代码(我可以找到),可能是出于安全原因。OpenSSL并没有很好的文档,所以我只能猜测这些函数到底做了什么。我找到的唯一一个示例代码不处理案例17 (应用程序内购买),这是我感兴趣的一件事。

我试着找出指针在数据流中的位置,但是我总是得到与49相同的毫无意义的结果。

代码语言:javascript
复制
    let receiptContents = NSData(contentsOfURL: receiptLocation)!

    let receiptBIO = BIO_new(BIO_s_mem())
    BIO_write(receiptBIO, receiptContents.bytes, Int32(receiptContents.length))
    contents = d2i_PKCS7_bio(receiptBIO, nil)

    //parsing
    var currentIndex    = UnsafePointer<UInt8>()
    var endIndex        = UnsafePointer<UInt8>()

    let octets      = pkcs7_d_data(pkcs7_d_sign(self.contents).memory.contents)

    var ptr = UnsafePointer<UInt8>(octets.memory.data)
    let end = ptr.advancedBy(Int(octets.memory.length))
    println(ptr.memory) //always 49 ???
    println(end.memory) //always 0 ???
    println(octets.memory.length)

我尝试自己解析NSData,但是,二进制数据的类型是什么呢?

代码语言:javascript
复制
    receiptContents = NSData(contentsOfURL: receiptLocation)!

    //get bytes
    let count = receiptContents.length / sizeof(UInt8)
    var bytes = [UInt8](count: count, repeatedValue: 0)
    receiptContents.getBytes(&bytes, length:count * sizeof(UInt8))

    //parsing
    for index in 0...5
    {
        let value = Int(bytes[index])
        println(value)
    }

我得到这个输出: 48 130 21 57 6 9

但是,如果正确理解ASN.1格式,它应该以17 (set)开始,然后以长度(Int24?)为3个字节,然后是16 (第一个序列)、序列长度(1字节)、序列类型(1字节)、序列有效载荷(重复)。

其他类型如Int32、Int16对我来说就更没有意义了。

不知道该怎么做。有什么建议吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-07-14 15:38:29

从一开始,我想我应该否认这一点,说我不太熟悉许多底层技术(Swift,OpenSSL,我认为你正在使用的生物特征标准)。

尽管如此,你可能违反了BER的标记规则。关于X.690的Wiki文章对BER标记的构造有一些介绍性的评论,但实际上您需要参考附件A. X.690的示例编码和X.680§8的标记信息。

SET类型可以以几种不同的形式出现;但在您的例子中,49 = 0x31 = 0b00110001 = UNIVERSAL 17 (SET,构造)。可能会出现其他形式,但这是唯一一个从标记本身显式标识为SET的表单:规范可以为SET类型使用不同的标记。

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

https://stackoverflow.com/questions/31408341

复制
相关文章

相似问题

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