sop/asn1

一个用于 X.690 ASN.1 DER 编码和解码的 PHP 库。

维护者

详细信息

github.com/sop/asn1

主页

源码

问题

4.1.1 2022-02-17 07:08 UTC

README

Build Status Scrutinizer Code Quality Coverage Status License

一个用于 X.690 抽象语法符号一(ASN.1)区别编码规则(DER)编码和解码的 PHP 库。

需求

  • PHP >=7.2
  • gmp
  • mbstring

安装

此库可在 Packagist 上找到。

composer require sop/asn1

使用方法

总体思路是,每个 ASN.1 类型都有一个对应的 PHP 类,该类了解特定类型的编码和解码细节。

要解码 DER 数据,使用期望类型的 fromDER 静态方法。要将对象编码为 DER,使用实例方法的 toDER

许多方法返回一个 UnspecifiedType 对象,它作为一个中间包装器,具有访问方法以确保类型安全。

所有对象都是不可变的,并且鼓励使用方法链以提高 API 的流畅性。错误时应抛出异常。

代码示例

以下是一些简单的使用示例。为了简洁起见,省略了命名空间。

编码

编码一个包含 UTF-8 字符串、整数和显式标记的对象标识符的序列,符合以下 ASN.1 规范

Example ::= SEQUENCE {
    greeting    UTF8String,
    answer      INTEGER,
    type    [1] EXPLICIT OBJECT IDENTIFIER
}
$seq = new Sequence(
    new UTF8String('Hello'),
    new Integer(42),
    new ExplicitlyTaggedType(
        1, new ObjectIdentifier('1.3.6.1.3'))
);
$der = $seq->toDER();

解码

解码上述 DER 编码。

$seq = UnspecifiedType::fromDER($der)->asSequence();
$greeting = $seq->at(0)->asUTF8String()->string();
$answer = $seq->at(1)->asInteger()->intNumber();
$type = $seq->at(2)->asTagged()->asExplicit()->asObjectIdentifier()->oid();

现实世界示例

以下是一些更多实际现实世界的使用示例。

ASN.1 参考

许可

本项目采用 MIT 许可证。