# @fidm/asn1 中文文档

规范地址：https://npmcn.com/package/%40fidm/asn1/

版本：1\.0\.4
npm 元数据更新时间：2022-04-05T10:39:49.182Z
中文译文更新时间：2026-11-14T17:12:39.098Z
软件包许可：MIT

本文由上游 README 翻译，可能存在偏差，请结合原文核对 API、命令与配置。版权与许可归原作者所有。

原始 npm 页面：https://www.npmjs.com/package/%40fidm/asn1
原文对照：https://npmcn.com/package/%40fidm/asn1/?lang=original
项目主页：https://github.com/fidm/asn1
源码仓库：https://github.com/fidm/asn1

## 关键信息（来自 npm 元数据）

- 包体积（解压后）：112 kB，15 个文件
- 模块格式：CommonJS
- TypeScript 类型：包内自带
- Node.js 要求：\>= 8
- 运行依赖：0 个
- 首次发布：2018-05-28T15:53:22.069Z
- 最新版本发布：2019-03-03T12:20:39.927Z
- 近 30 天下载量：2558981（2026-10-15 至 2026-11-13，npm 官方下载统计）
- 已发布版本数：5（近 12 个月 0 个）

## 中文简介

ASN.1/DER, 节点的 PEM.js

## 安装

```sh
npm install @fidm/asn1
```

也可以使用：`pnpm add @fidm/asn1`、`yarn add @fidm/asn1`、`bun add @fidm/asn1`

## README

# [@fidm/asn1 (英语)](https://github.com/fidm/asn1)

ASN.1/DER,节点的PEM.j.

[![NPM version](https://img.shields.io/npm/v/@fidm/asn1.svg)](https://www.npmjs.com/package/@fidm/asn1) [![Build Status](http://img.shields.io/travis/fidm/asn1.svg)](https://travis-ci.org/fidm/asn1) [![Downloads](https://img.shields.io/npm/dm/@fidm/asn1.svg?style=flat-square)](https://npmjs.org/package/@fidm/asn1)

## 安装

```
npm i --save @fidm/asn1
```

## 文档

[https://fidm.github.io/asn1 (英语)](https://fidm.github.io/asn1/)

## 依赖者

[@fidm/x509 (英语)](https://github.com/fidm/x509)

## 示例

### 用 ASN.1 模板从 PEM 文件解析一个私钥

```js
const fs = require('fs')
const { PEM, ASN1, Class, Tag } = require('@fidm/asn1')

// ASN.1 Template https://tools.ietf.org/html/rfc5208
const privateKeyValidator = {
  name: 'PrivateKeyInfo',
  class: Class.UNIVERSAL,
  tag: Tag.SEQUENCE,
  capture: 'privateKeyInfo',
  value: [{
    name: 'PrivateKeyInfo.Version',
    class: Class.UNIVERSAL,
    tag: Tag.INTEGER,
    capture: 'privateKeyVersion'
  }, {
    name: 'PrivateKeyInfo.AlgorithmIdentifier',
    class: Class.UNIVERSAL,
    tag: Tag.SEQUENCE,
    value: [{
      name: 'PrivateKeyAlgorithmIdentifier.algorithm',
      class: Class.UNIVERSAL,
      tag: Tag.OID,
      capture: 'privateKeyOID'
    }]
  }, {
    name: 'PrivateKeyInfo.PrivateKey',
    class: Class.UNIVERSAL,
    tag: Tag.OCTETSTRING,
    capture: 'privateKey'
  }]
}

const rootkey = PEM.parse(fs.readFileSync('./test/cert/rootkey.pem'))[0]
const captures = ASN1.parseDERWithTemplate(rootkey.body, privateKeyValidator)
console.log(captures)
// { privateKeyInfo:
//   <ASN1 { class: 'UNIVERSAL',
//     tag: 'SEQUENCE',
//     value:
//      [ { class: 'UNIVERSAL', tag: 'INTEGER', value: 0 },
//        { class: 'UNIVERSAL',
//          tag: 'SEQUENCE',
//          value:
//           [ { class: 'UNIVERSAL', tag: 'OID', value: '1.2.840.113549.1.1.1' },
//             { class: 'UNIVERSAL', tag: 'NULL', value: null } ] },
//        { class: 'UNIVERSAL',
//          tag: 'OCTETSTRING',
//          value:
//           <Buffer 30 82 04 a5 02 01 00 02 82 01 01 00 bf 9a 15 d6 cd cd ba ce d2 20 d8 3b a2 6b b9 03 1b 9e 12 02 bd ee 68 79 3d 4d e1 81 9a 65 89 21 5a 11 29 8b da a2 ... > } ] }>,
//  privateKeyVersion: <ASN1 { class: 'UNIVERSAL', tag: 'INTEGER', value: 0 }>,
//  privateKeyOID:
//   <ASN1 { class: 'UNIVERSAL', tag: 'OID', value: '1.2.840.113549.1.1.1' }>,
//  privateKey:
//   <ASN1 { class: 'UNIVERSAL',
//     tag: 'OCTETSTRING',
//     value:
//      <Buffer 30 82 04 a5 02 01 00 02 82 01 01 00 bf 9a 15 d6 cd cd ba ce d2 20 d8 3b a2 6b b9 03 1b 9e 12 02 bd ee 68 79 3d 4d e1 81 9a 65 89 21 5a 11 29 8b da a2 ... > }> }
```

### 从 PKCS# 1 私钥 ASN1 对象构建 PKCS# 8 私钥 ASN1 对象

```js
const { ASN1, Class, Tag } = require('@fidm/asn1')

const rsaPrivateKeyASN1 = getSomeRSAPrivateKeyASN1()
const privateKeyASN1 = ASN1.Seq([
  // Version (INTEGER)
  rsaPrivateKeyASN1.value[0],
  // AlgorithmIdentifier
  ASN1.Seq([
    // algorithm
    ASN1.OID('1.2.840.113549.1.1.1'),
    // optional parameters
    ASN1.Null(),
  ]),
  // PrivateKey
  new ASN1(Class.UNIVERSAL, Tag.OCTETSTRING, rsaPrivateKeyASN1.DER),
])
```

### 从 PEM 文件解析证书

```js
const fs = require('fs')
const { PEM, ASN1 } = require('@fidm/asn1')

const pems = PEM.parse(fs.readFileSync('./test/cert/github.crt'))
const asn1 = ASN1.fromDER(pems[0].body)
console.log(asn1)
// <ASN1 { class: 'UNIVERSAL',
//   tag: 'SEQUENCE',
//   value:
//    [ { class: 'UNIVERSAL',
//        tag: 'SEQUENCE',
//        value:
//         [ { class: 'CONTEXT_SPECIFIC',
//             tag: 0,
//             value: [ { class: 'UNIVERSAL', tag: 'INTEGER', value: 2 } ] },
//           { class: 'UNIVERSAL',
//             tag: 'INTEGER',
//             value: '0a0630427f5bbced6957396593b6451f' },
//           { class: 'UNIVERSAL',
//             tag: 'SEQUENCE',
//             value:
//              [ { class: 'UNIVERSAL',
//                  tag: 'OID',
//                  value: '1.2.840.113549.1.1.11' },
//                { class: 'UNIVERSAL', tag: 'NULL', value: null } ] },
//           { class: 'UNIVERSAL',
//             tag: 'SEQUENCE',
//             value:
//              [ { class: 'UNIVERSAL',
//                  tag: 'SET',
//                  value:
//                   [ { class: 'UNIVERSAL',
//                       tag: 'SEQUENCE',
//                       value:
//                        [ { class: 'UNIVERSAL', tag: 'OID', value: '2.5.4.6' },
//                          { class: 'UNIVERSAL', tag: 'PRINTABLESTRING', value: 'US' } ] } ] },
//                { class: 'UNIVERSAL',
//                  tag: 'SET',
//                  value:
//                   [ { class: 'UNIVERSAL',
//                       tag: 'SEQUENCE',
//                       value:
//                        [ { class: 'UNIVERSAL', tag: 'OID', value: '2.5.4.10' },
//                          { class: 'UNIVERSAL',
//                            tag: 'PRINTABLESTRING',
//                            value: 'DigiCert Inc' } ] } ] },
//                { class: 'UNIVERSAL',
//                  tag: 'SET',
//                  value:
//                   [ { class: 'UNIVERSAL',
//                       tag: 'SEQUENCE',
//                       value:
//                        [ { class: 'UNIVERSAL', tag: 'OID', value: '2.5.4.11' },
//                          { class: 'UNIVERSAL',
//                            tag: 'PRINTABLESTRING',
//                            value: 'www.digicert.com' } ] } ] },
//                { class: 'UNIVERSAL',
//                  tag: 'SET',
//                  value:
//                   [ { class: 'UNIVERSAL',
//                       tag: 'SEQUENCE',
//                       value:
//                        [ { class: 'UNIVERSAL', tag: 'OID', value: '2.5.4.3' },
//                          { class: 'UNIVERSAL',
//                            tag: 'PRINTABLESTRING',
//                            value: 'DigiCert SHA2 Extended Validation Server CA' } ] } ] } ] },
//           { class: 'UNIVERSAL',
//             tag: 'SEQUENCE',
//             value:
//              [ { class: 'UNIVERSAL',
//                  tag: 'UTCTIME',
//                  value: 2018-05-08T00:00:00.000Z },
//                { class: 'UNIVERSAL',
//                  tag: 'UTCTIME',
//                  value: 2020-06-03T12:00:00.000Z } ] },
//           { class: 'UNIVERSAL',
//             tag: 'SEQUENCE',
//             value:
//              [ { class: 'UNIVERSAL',
//                  tag: 'SET',
//                  value:
//                   [ { class: 'UNIVERSAL',
//                       tag: 'SEQUENCE',
//                       value:
//                        [ { class: 'UNIVERSAL', tag: 'OID', value: '2.5.4.15' },
//                          { class: 'UNIVERSAL',
//                            tag: 'UTF8',
//                            value: 'Private Organization' } ] } ] },
//                { class: 'UNIVERSAL',
//                  tag: 'SET',
//                  value:
//                   [ { class: 'UNIVERSAL',
//                       tag: 'SEQUENCE',
//                       value:
//                        [ { class: 'UNIVERSAL',
//                            tag: 'OID',
//                            value: '1.3.6.1.4.1.311.60.2.1.3' },
//                          { class: 'UNIVERSAL', tag: 'PRINTABLESTRING', value: 'US' } ] } ] },
//                { class: 'UNIVERSAL',
//                  tag: 'SET',
//                  value:
//                   [ { class: 'UNIVERSAL',
//                       tag: 'SEQUENCE',
//                       value:
//                        [ { class: 'UNIVERSAL',
//                            tag: 'OID',
//                            value: '1.3.6.1.4.1.311.60.2.1.2' },
//                          { class: 'UNIVERSAL', tag: 'PRINTABLESTRING', value: 'Delaware' } ] } ] },
//                { class: 'UNIVERSAL',
//                  tag: 'SET',
//                  value:
//                   [ { class: 'UNIVERSAL',
//                       tag: 'SEQUENCE',
//                       value:
//                        [ { class: 'UNIVERSAL', tag: 'OID', value: '2.5.4.5' },
//                          { class: 'UNIVERSAL', tag: 'PRINTABLESTRING', value: '5157550' } ] } ] },
//                { class: 'UNIVERSAL',
//                  tag: 'SET',
//                  value:
//                   [ { class: 'UNIVERSAL',
//                       tag: 'SEQUENCE',
//                       value:
//                        [ { class: 'UNIVERSAL', tag: 'OID', value: '2.5.4.6' },
//                          { class: 'UNIVERSAL', tag: 'PRINTABLESTRING', value: 'US' } ] } ] },
//                { class: 'UNIVERSAL',
//                  tag: 'SET',
//                  value:
//                   [ { class: 'UNIVERSAL',
//                       tag: 'SEQUENCE',
//                       value:
//                        [ { class: 'UNIVERSAL', tag: 'OID', value: '2.5.4.8' },
//                          { class: 'UNIVERSAL',
//                            tag: 'PRINTABLESTRING',
//                            value: 'California' } ] } ] },
//                { class: 'UNIVERSAL',
//                  tag: 'SET',
//                  value:
//                   [ { class: 'UNIVERSAL',
//                       tag: 'SEQUENCE',
//                       value:
//                        [ { class: 'UNIVERSAL', tag: 'OID', value: '2.5.4.7' },
//                          { class: 'UNIVERSAL',
//                            tag: 'PRINTABLESTRING',
//                            value: 'San Francisco' } ] } ] },
//                { class: 'UNIVERSAL',
//                  tag: 'SET',
//                  value:
//                   [ { class: 'UNIVERSAL',
//                       tag: 'SEQUENCE',
//                       value:
//                        [ { class: 'UNIVERSAL', tag: 'OID', value: '2.5.4.10' },
//                          { class: 'UNIVERSAL',
//                            tag: 'PRINTABLESTRING',
//                            value: 'GitHub, Inc.' } ] } ] },
//                { class: 'UNIVERSAL',
//                  tag: 'SET',
//                  value:
//                   [ { class: 'UNIVERSAL',
//                       tag: 'SEQUENCE',
//                       value:
//                        [ { class: 'UNIVERSAL', tag: 'OID', value: '2.5.4.3' },
//                          { class: 'UNIVERSAL',
//                            tag: 'PRINTABLESTRING',
//                            value: 'github.com' } ] } ] } ] },
//           { class: 'UNIVERSAL',
//             tag: 'SEQUENCE',
//             value:
//              [ { class: 'UNIVERSAL',
//                  tag: 'SEQUENCE',
//                  value:
//                   [ { class: 'UNIVERSAL', tag: 'OID', value: '1.2.840.113549.1.1.1' },
//                     { class: 'UNIVERSAL', tag: 'NULL', value: null } ] },
//                { class: 'UNIVERSAL',
//                  tag: 'BITSTRING',
//                  value:
//                   BitString {
//                     buf:
//                      <Buffer 30 82 01 0a 02 82 01 01 00 c6 3c aa f2 3c 97 0c 3a c1 4f 28 ad 72 70 7d d3 ce b9 b5 60 73 a4 74 9b 8a 77 46 fd 7a 98 42 4c c5 30 19 57 9a a9 33 0b e1 ... >,
//                     bitLen: 2160 } } ] },
//           { class: 'CONTEXT_SPECIFIC',
//             tag: 3,
//             value:
//              [ { class: 'UNIVERSAL',
//                  tag: 'SEQUENCE',
//                  value:
//                   [ { class: 'UNIVERSAL',
//                       tag: 'SEQUENCE',
//                       value:
//                        [ { class: 'UNIVERSAL', tag: 'OID', value: '2.5.29.35' },
//                          { class: 'UNIVERSAL',
//                            tag: 'OCTETSTRING',
//                            value:
//                             <Buffer 30 16 80 14 3d d3 50 a5 d6 a0 ad ee f3 4a 60 0a 65 d3 21 d4 f8 f8 d6 0f> } ] },
//                     { class: 'UNIVERSAL',
//                       tag: 'SEQUENCE',
//                       value:
//                        [ { class: 'UNIVERSAL', tag: 'OID', value: '2.5.29.14' },
//                          { class: 'UNIVERSAL',
//                            tag: 'OCTETSTRING',
//                            value:
//                             <Buffer 04 14 c9 c2 53 61 66 9d 5f ab 25 f4 26 cd 0f 38 9a a8 49 ea 48 a9> } ] },
//                     { class: 'UNIVERSAL',
//                       tag: 'SEQUENCE',
//                       value:
//                        [ { class: 'UNIVERSAL', tag: 'OID', value: '2.5.29.17' },
//                          { class: 'UNIVERSAL',
//                            tag: 'OCTETSTRING',
//                            value:
//                             <Buffer 30 1c 82 0a 67 69 74 68 75 62 2e 63 6f 6d 82 0e 77 77 77 2e 67 69 74 68 75 62 2e 63 6f 6d> } ] },
//                     { class: 'UNIVERSAL',
//                       tag: 'SEQUENCE',
//                       value:
//                        [ { class: 'UNIVERSAL', tag: 'OID', value: '2.5.29.15' },
//                          { class: 'UNIVERSAL', tag: 'BOOLEAN', value: true },
//                          { class: 'UNIVERSAL',
//                            tag: 'OCTETSTRING',
//                            value: <Buffer 03 02 05 a0> } ] },
//                     { class: 'UNIVERSAL',
//                       tag: 'SEQUENCE',
//                       value:
//                        [ { class: 'UNIVERSAL', tag: 'OID', value: '2.5.29.37' },
//                          { class: 'UNIVERSAL',
//                            tag: 'OCTETSTRING',
//                            value:
//                             <Buffer 30 14 06 08 2b 06 01 05 05 07 03 01 06 08 2b 06 01 05 05 07 03 02> } ] },
//                     { class: 'UNIVERSAL',
//                       tag: 'SEQUENCE',
//                       value:
//                        [ { class: 'UNIVERSAL', tag: 'OID', value: '2.5.29.31' },
//                          { class: 'UNIVERSAL',
//                            tag: 'OCTETSTRING',
//                            value:
//                             <Buffer 30 6c 30 34 a0 32 a0 30 86 2e 68 74 74 70 3a 2f 2f 63 72 6c 33 2e 64 69 67 69 63 65 72 74 2e 63 6f 6d 2f 73 68 61 32 2d 65 76 2d 73 65 72 76 65 72 2d ... > } ] },
//                     { class: 'UNIVERSAL',
//                       tag: 'SEQUENCE',
//                       value:
//                        [ { class: 'UNIVERSAL', tag: 'OID', value: '2.5.29.32' },
//                          { class: 'UNIVERSAL',
//                            tag: 'OCTETSTRING',
//                            value:
//                             <Buffer 30 42 30 37 06 09 60 86 48 01 86 fd 6c 02 01 30 2a 30 28 06 08 2b 06 01 05 05 07 02 01 16 1c 68 74 74 70 73 3a 2f 2f 77 77 77 2e 64 69 67 69 63 65 72 ... > } ] },
//                     { class: 'UNIVERSAL',
//                       tag: 'SEQUENCE',
//                       value:
//                        [ { class: 'UNIVERSAL', tag: 'OID', value: '1.3.6.1.5.5.7.1.1' },
//                          { class: 'UNIVERSAL',
//                            tag: 'OCTETSTRING',
//                            value:
//                             <Buffer 30 7a 30 24 06 08 2b 06 01 05 05 07 30 01 86 18 68 74 74 70 3a 2f 2f 6f 63 73 70 2e 64 69 67 69 63 65 72 74 2e 63 6f 6d 30 52 06 08 2b 06 01 05 05 07 ... > } ] },
//                     { class: 'UNIVERSAL',
//                       tag: 'SEQUENCE',
//                       value:
//                        [ { class: 'UNIVERSAL', tag: 'OID', value: '2.5.29.19' },
//                          { class: 'UNIVERSAL', tag: 'BOOLEAN', value: true },
//                          { class: 'UNIVERSAL', tag: 'OCTETSTRING', value: <Buffer 30 00> } ] },
//                     { class: 'UNIVERSAL',
//                       tag: 'SEQUENCE',
//                       value:
//                        [ { class: 'UNIVERSAL',
//                            tag: 'OID',
//                            value: '1.3.6.1.4.1.11129.2.4.2' },
//                          { class: 'UNIVERSAL',
//                            tag: 'OCTETSTRING',
//                            value:
//                             <Buffer 04 82 01 6a 01 68 00 76 00 a4 b9 09 90 b4 18 58 14 87 bb 13 a2 cc 67 70 0a 3c 35 98 04 f9 1b df b8 e3 77 cd 0e c8 0d dc 10 00 00 01 63 41 62 6d 0a 00 ... > } ] } ] } ] } ] },
//      { class: 'UNIVERSAL',
//        tag: 'SEQUENCE',
//        value:
//         [ { class: 'UNIVERSAL',
//             tag: 'OID',
//             value: '1.2.840.113549.1.1.11' },
//           { class: 'UNIVERSAL', tag: 'NULL', value: null } ] },
//      { class: 'UNIVERSAL',
//        tag: 'BITSTRING',
//        value:
//         BitString {
//           buf:
//            <Buffer 70 0f 5a 96 a7 58 e5 bf 8a 9d a8 27 98 2b 00 7f 26 a9 07 da ba 7b 82 54 4f af 69 cf bc f2 59 03 2b f2 d5 74 58 25 d8 1e a4 20 76 62 60 29 73 2a d7 dc ... >,
//           bitLen: 2048 } } ] }>
```

### 许可证

@fidm/asn1根据该条例获得许可 [麻省理工学院](https://github.com/fidm/asn1/blob/master/LICENSE) 执照. 版权:© 2018-2019 FIDM.

## 常见问题

### @fidm/asn1 是什么？

ASN\.1/DER, 节点的 PEM\.js

### 如何安装 @fidm/asn1？

在项目目录运行 npm install @fidm/asn1，或使用 pnpm add / yarn add / bun add。

### @fidm/asn1 支持 TypeScript 吗？

支持。包内自带 TypeScript 类型声明（package\.json 声明了 types 入口），安装后即可获得类型提示，无需再安装 @types 包。

### @fidm/asn1 支持 ESM 还是 CommonJS？

以 CommonJS 形式发布，可以直接 require\(\)；在 ES Module 项目中也可以用 import 引入（Node\.js 会把 module\.exports 作为默认导出）。

### @fidm/asn1 需要什么版本的 Node\.js？

package\.json 的 engines 字段要求 Node\.js \>= 8。版本不符时 npm 默认只给出警告，开启 engine-strict 后会拒绝安装。

### @fidm/asn1 可以商用吗？

@fidm/asn1 使用 MIT 许可。宽松许可：允许商业使用、修改和再分发，通常只需在分发时保留原版权与许可声明。以上为概括，不构成法律意见，请以许可原文为准。

### @fidm/asn1 的下载量有多少？

根据 npm 官方下载统计，@fidm/asn1 在 2026/10/15 – 2026/11/13 这 30 天内被下载 2,558,981 次，日均约 85,299 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入，适合横向比较热度，不能直接等同于使用人数。

### @fidm/asn1 还在维护吗？

最新版本 1\.0\.4 发布于 2019/03/03（7 年前）；至今共发布 5 个版本，其中过去 12 个月发布了 0 个；首次发布于 2018/05/28。发布频率只是参考信号：功能稳定的工具可能很少需要更新，建议结合源码仓库的 issue 和提交记录判断。

