是否存在用于解析ASN.1或基于其生成PHP代码的PHP库?

11

我已经尝试过了,但今天我的Google-fu不够强。

我正在开发一种标准协议,用于在Apache/PHP服务器和嵌入式微控制器上的嵌入式C代码之间通过TCP/IP连接交换数据结构。

我们使用ASN.1表示法,我真正想做的是有一段PHP代码可以解析ASN.1文档并用它来解释传入的数据。它会生成一个适当结构的PHP对象(或数组),这基于ASN.1。这里的目标是让解析文档并创建对象的PHP对文档的细节不可知(即不手动编码以匹配文档内容)。

或者,如果不可能,是否有什么东西可以让我生成简单的PHP数据传输对象类,我每次更改ASN.1协议文档时都可以重新运行?从效率的角度来看,这实际上可能更可取,因为您不必为每个传入请求重新解释ASN.1。

谢谢!请告诉我是否可以提供任何额外的澄清来回答这个问题。


你可以使用C编译器创建C代码,然后将其生成为PHP扩展。 - hakre
从未听说过ASN.1,我猜C语言中没有JSON库? xD - dynamic
我也没有找到任何东西,但是使用ASN.1是必要的吗? - Nick ODell
无论我们最终使用什么,都不应该是hacky的(因为我想c->php扩展可能会这样),不幸的是,由于在嵌入式C社区中它的普及程度,我们必须使用ASN.1。这是我们开发人员使用的,也是他们的同事所理解的。 - Grekker
1
而且,我确实曾经短暂地希望C有一个JSON实现... :) 无论如何,您也不会真正希望这样做,因为语法开销很大。带宽使用在这里非常重要。 使用ASN.1的主要用途之一是具有单一的、标准化的方式来描述消息格式,而无需任何额外的字符开销来结构化它们。 - Grekker
3个回答

6

如果有人在寻找关于这个问题的答案:您可以尝试使用PHPASN1来进行纯ASN.1编解码,或者phpseclib,它也可以处理ASN.1,但不是专注于此。

我是FGrosse/PHPASN1的开发者。


注意:PHPASN1库需要PHP 5.6+,phpseclib需要PHP 4+。 - icc97

4

phpseclib可以像OpenSSL的asn1parse一样解码ASN.1结构:

http://phpseclib.sourceforge.net/x509/asn1parse.php

如果你查看源代码,它会使用由$asn1->decodeBER返回的数组,并将其呈现为显示的字符串。但是,它与OpenSSL的asn1parse完全一致,这证明了phpseclib的强大之处。


1
凡是进入此处的人都要小心,特别是那些试图进行编码而不是解码的人。除了在phpseclib自己的X509.php中,不要期望在任何地方找到任何示例。ASN.1教程是有用的。 - icc97

2

看起来很有前途,我会试着玩一下。 - Grekker

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接