fgrosse / phpasn1
一个PHP框架,允许您使用ITU-T X.690编码规则对任意ASN.1结构进行编码和解码。
Requires
- php: ^7.1 || ^8.0
Requires (Dev)
- php-coveralls/php-coveralls: ~2.0
- phpunit/phpunit: ^7.0 || ^8.0 || ^9.0
Suggests
- ext-bcmath: BCmath is the fallback extension for big integer calculations
- ext-curl: For loading OID information from the web if they have not bee defined statically
- ext-gmp: GMP is the preferred extension for big integer calculations
- phpseclib/bcmath_compat: BCmath polyfill for servers where neither GMP nor BCmath is available
This package is not auto-updated.
Last update: 2022-12-19 11:15:06 UTC
README
注意:此库不再积极维护!
如果您目前正在使用PHPASN1,这可能不会是您的一个即时问题,因为这个库始终相对稳定。但是,您建议迁移到替代软件包以确保您的应用程序在较新版本的PHP上也能保持功能。
一个PHP框架,允许您使用ASN.1结构进行编码和解码,使用ITU-T X.690编码规则。这种编码在X.509 PKI环境或异构计算机系统之间的通信中非常常用。
API允许您将ASN.1结构编码成二进制数据,例如证书签名请求(CSR)、X.509证书或证书吊销列表(CRL)。PHPASN1还可以将BER编码的二进制数据读取到单独的PHP对象中,这些对象可以被用户操作并在之后重新编码。
变更日志现在可以在CHANGELOG.md中找到。
依赖
PHPASN1需要至少PHP 7.0
和gmp
或bcmath
扩展。从v2.0
开始不再支持旧版本的PHP(即PHP 5.6)。如果您必须使用过时的PHP版本,请考虑使用PHPASN v1.5。
从网络直接加载对象标识符名称时使用curl。
安装
安装此库的首选方式是依赖Composer。
$ composer require fgrosse/phpasn1
使用
编码ASN.1结构
PHPASN1为您提供了每个实现的ASN.1通用类型的一个类。构造函数应该是相当直观的,因此您应该没有太大困难开始使用。所有数据都将使用DER编码进行编码。
use FG\ASN1\OID; use FG\ASN1\Universal\Integer; use FG\ASN1\Universal\Boolean; use FG\ASN1\Universal\Enumerated; use FG\ASN1\Universal\IA5String; use FG\ASN1\Universal\ObjectIdentifier; use FG\ASN1\Universal\PrintableString; use FG\ASN1\Universal\Sequence; use FG\ASN1\Universal\Set; use FG\ASN1\Universal\NullObject; $integer = new Integer(123456); $boolean = new Boolean(true); $enum = new Enumerated(1); $ia5String = new IA5String('Hello world'); $asnNull = new NullObject(); $objectIdentifier1 = new ObjectIdentifier('1.2.250.1.16.9'); $objectIdentifier2 = new ObjectIdentifier(OID::RSA_ENCRYPTION); $printableString = new PrintableString('Foo bar'); $sequence = new Sequence($integer, $boolean, $enum, $ia5String); $set = new Set($sequence, $asnNull, $objectIdentifier1, $objectIdentifier2, $printableString); $myBinary = $sequence->getBinary(); $myBinary .= $set->getBinary(); echo base64_encode($myBinary);
解码二进制数据
解码BER编码的二进制数据与编码一样简单
use FG\ASN1\ASNObject; $base64String = ... $binaryData = base64_decode($base64String); $asnObject = ASNObject::fromBinary($binaryData); // do stuff
如果您已经确切知道预期数据应该如何看起来,您可以使用FG\ASN1\TemplateParser
use FG\ASN1\TemplateParser; // first define your template $template = [ Identifier::SEQUENCE => [ Identifier::SET => [ Identifier::OBJECT_IDENTIFIER, Identifier::SEQUENCE => [ Identifier::INTEGER, Identifier::BITSTRING, ] ] ] ]; // if your binary data is not matching the template you provided this will throw an `\Exception`: $parser = new TemplateParser(); $object = $parser->parseBinary($data, $template); // there is also a convenience function if you parse binary data from base64: $object = $parser->parseBase64($data, $template);
您可以使用此函数确保您的数据正好符合您所期望的格式。
导航解码数据
所有构造的类(例如 Sequence
和 Set
)都可以通过数组访问或使用迭代器进行导航。您可以在以下位置找到示例:[这里](https://github.com/fgrosse/PHPASN1/blob/f6442cadda9d36f3518c737e32f28300a588b777/tests/ASN1/Universal/SequenceTest.php#L148-148),[这里](https://github.com/fgrosse/PHPASN1/blob/f6442cadda9d36f3518c737e32f28300a588b777/tests/ASN1/Universal/SequenceTest.php#L121),以及[这里](https://github.com/fgrosse/PHPASN1/blob/f6442cadda9d36f3518c737e32f28300a588b777/tests/ASN1/TemplateParserTest.php#L45)。
给我更多示例!
要查看API类的示例用法或一些生成的输出,请查看[示例](https://github.com/fgrosse/PHPASN1/tree/master/examples)。
我如何贡献?
此项目不再维护,因此不接受任何新的贡献。
感谢
到目前为止的所有贡献者!
许可证
此库在MIT许可证下分发。