asn1.js vs crypto-js vs crypto vs node-rsa vs openpgp vs jsencrypt
暗号化ライブラリ
asn1.jscrypto-jscryptonode-rsaopenpgpjsencrypt類似パッケージ:
暗号化ライブラリ

これらのライブラリは、データの暗号化、復号化、署名、検証など、セキュリティに関連する機能を提供します。これにより、開発者は安全な通信やデータ保護を実現できます。各ライブラリは異なる暗号化手法や用途に特化しており、特定のニーズに応じて選択することが重要です。

npmのダウンロードトレンド
3 年
GitHub Starsランキング
統計詳細
パッケージ
ダウンロード数
Stars
サイズ
Issues
公開日時
ライセンス
asn1.js14,416,594189-425年前MIT
crypto-js11,648,51316,351487 kB2792年前MIT
crypto1,550,36032-148年前ISC
node-rsa1,336,1911,384-305年前MIT
openpgp660,8095,91417.3 MB283日前LGPL-3.0+
jsencrypt335,5866,793901 kB1404ヶ月前MIT
機能比較: asn1.js vs crypto-js vs crypto vs node-rsa vs openpgp vs jsencrypt

暗号化方式

  • asn1.js:

    ASN.1形式のデータを扱うためのライブラリで、データの構造を定義し、エンコードやデコードを行います。

  • crypto-js:

    クライアントサイドでのAES、DES、Rabbitなどの暗号化アルゴリズムを提供し、ブラウザでの使用に最適です。

  • crypto:

    Node.jsの組み込みモジュールで、AES、SHA、HMACなどの多様な暗号化アルゴリズムをサポートしています。

  • node-rsa:

    RSA暗号化のための強力なライブラリで、鍵の生成、暗号化、復号化をサポートしています。

  • openpgp:

    PGP標準に基づいた暗号化ライブラリで、公開鍵暗号方式を用いたデータの暗号化や署名が可能です。

  • jsencrypt:

    RSA暗号化を簡単に実装できるライブラリで、公開鍵と秘密鍵を使用したデータの暗号化が可能です。

使用シナリオ

  • asn1.js:

    ASN.1を使用するプロトコルやデータフォーマットにおいて、データのエンコードやデコードが必要な場合に使用します。

  • crypto-js:

    ブラウザ上でのデータ暗号化やハッシュ化が必要な場合に使用します。特に、クライアントサイドでのセキュリティ強化に役立ちます。

  • crypto:

    Node.jsアプリケーションでの基本的な暗号化機能が必要な場合に使用します。特に、サーバーサイドでのデータ保護に適しています。

  • node-rsa:

    Node.js環境でRSA暗号化を使用する必要がある場合に使用します。特に、セキュアな通信を実現する際に役立ちます。

  • openpgp:

    PGP暗号化を使用して、メールやファイルを安全に送信したい場合に使用します。特に、高いセキュリティが求められるシナリオに適しています。

  • jsencrypt:

    ウェブアプリケーションでRSA暗号化を使用したい場合に使用します。特に、ユーザーのデータを安全に送信する際に便利です。

学習曲線

  • asn1.js:

    ASN.1の知識が必要であり、初学者にはやや難しいかもしれませんが、特定の用途には非常に有用です。

  • crypto-js:

    ブラウザでの使用に特化しているため、比較的簡単に学べます。特に、JavaScriptに慣れている開発者には扱いやすいです。

  • crypto:

    Node.jsの基本を理解している場合、比較的簡単に学べますが、暗号化の概念についての理解が必要です。

  • node-rsa:

    RSAの基本を理解している必要がありますが、APIは直感的で使いやすいです。

  • openpgp:

    PGPの概念を理解する必要があり、初心者にはやや難しいかもしれませんが、セキュリティに関心がある開発者には価値があります。

  • jsencrypt:

    RSAの基本的な概念を理解していれば、簡単に使用できます。APIがシンプルで、学習しやすいです。

パフォーマンス

  • asn1.js:

    ASN.1のエンコードやデコードは、データのサイズや複雑さに依存しますが、一般的には効率的です。

  • crypto-js:

    ブラウザでの使用に最適化されているため、パフォーマンスは良好ですが、Node.jsのネイティブモジュールには劣ります。

  • crypto:

    Node.jsのネイティブモジュールであるため、非常に高いパフォーマンスを発揮します。特に、大量のデータを処理する際に優れています。

  • node-rsa:

    RSA暗号化のパフォーマンスは良好で、特に大きなデータを扱う際に効果的です。

  • openpgp:

    PGP暗号化は計算コストが高く、パフォーマンスに影響を与える可能性がありますが、高いセキュリティを提供します。

  • jsencrypt:

    RSA暗号化は計算コストが高いため、パフォーマンスはやや低下する可能性がありますが、簡単に使用できる利点があります。

拡張性

  • asn1.js:

    ASN.1の仕様に基づいているため、特定の要件に応じて拡張可能です。

  • crypto-js:

    ブラウザ環境での使用に特化しているため、拡張性は高いですが、Node.jsとの統合には制限があります。

  • crypto:

    Node.jsのエコシステムとの統合が容易で、他のモジュールと組み合わせて使用することができます。

  • node-rsa:

    RSAの機能を拡張するためのオプションが豊富で、特定の要件に応じてカスタマイズ可能です。

  • openpgp:

    PGPの仕様に基づいているため、拡張性が高く、特定のニーズに応じてカスタマイズ可能です。

  • jsencrypt:

    シンプルなAPIを提供しているため、他のライブラリと組み合わせて使用することが容易です。

選び方: asn1.js vs crypto-js vs crypto vs node-rsa vs openpgp vs jsencrypt
  • asn1.js:

    ASN.1形式のデータを扱う必要がある場合に選択します。特に、通信プロトコルやデータフォーマットでASN.1を使用する場合に便利です。

  • crypto-js:

    ブラウザ環境での暗号化が必要な場合に選択します。特に、クライアントサイドでのデータ暗号化やハッシュ化に適しています。

  • crypto:

    Node.jsの組み込みモジュールで、基本的な暗号化機能が必要な場合に選択します。パフォーマンスが重要なアプリケーションに適しています。

  • node-rsa:

    Node.js環境でのRSA暗号化が必要な場合に選択します。より高度なRSA機能を必要とする場合に適しています。

  • openpgp:

    PGP暗号化を使用する必要がある場合に選択します。特に、メールやファイルの暗号化に適しており、セキュリティが重視される場面で有効です。

  • jsencrypt:

    RSA暗号化を簡単に実装したい場合に選択します。特に、公開鍵暗号方式を使用したい場合に便利です。

asn1.js のREADME

ASN1.js

ASN.1 DER Encoder/Decoder and DSL.

Example

Define model:

var asn = require('asn1.js');

var Human = asn.define('Human', function() {
  this.seq().obj(
    this.key('firstName').octstr(),
    this.key('lastName').octstr(),
    this.key('age').int(),
    this.key('gender').enum({ 0: 'male', 1: 'female' }),
    this.key('bio').seqof(Bio)
  );
});

var Bio = asn.define('Bio', function() {
  this.seq().obj(
    this.key('time').gentime(),
    this.key('description').octstr()
  );
});

Encode data:

var output = Human.encode({
  firstName: 'Thomas',
  lastName: 'Anderson',
  age: 28,
  gender: 'male',
  bio: [
    {
      time: +new Date('31 March 1999'),
      description: 'freedom of mind'
    }
  ]
}, 'der');

Decode data:

var human = Human.decode(output, 'der');
console.log(human);
/*
{ firstName: <Buffer 54 68 6f 6d 61 73>,
  lastName: <Buffer 41 6e 64 65 72 73 6f 6e>,
  age: 28,
  gender: 'male',
  bio:
   [ { time: 922820400000,
       description: <Buffer 66 72 65 65 64 6f 6d 20 6f 66 20 6d 69 6e 64> } ] }
*/

Partial decode

Its possible to parse data without stopping on first error. In order to do it, you should call:

var human = Human.decode(output, 'der', { partial: true });
console.log(human);
/*
{ result: { ... },
  errors: [ ... ] }
*/

LICENSE

This software is licensed under the MIT License.

Copyright Fedor Indutny, 2017.

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.