sop / asn1
一个用于 X.690 ASN.1 DER 编码和解码的 PHP 库。
4.1.1
2022-02-17 07:08 UTC
Requires
- php: >=7.2
- ext-gmp: *
- ext-mbstring: *
Requires (Dev)
- phpunit/phpunit: ^8.1
README
一个用于 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 许可证。