crypto-js vs md5 vs bcrypt vs sha1 vs sha256
暗号化ライブラリ
crypto-jsmd5bcryptsha1sha256類似パッケージ:
暗号化ライブラリ

暗号化ライブラリは、データのセキュリティを確保するために使用されるツールであり、パスワードのハッシュ化やデータの暗号化を行うために利用されます。これらのライブラリは、データの整合性と機密性を保護するために重要な役割を果たします。特にウェブ開発においては、ユーザーのパスワードや個人情報を安全に管理するために不可欠です。

npmのダウンロードトレンド
3 年
GitHub Starsランキング
統計詳細
パッケージ
ダウンロード数
Stars
サイズ
Issues
公開日時
ライセンス
crypto-js10,512,38116,348487 kB2792年前MIT
md510,323,42291121.4 kB14-BSD-3-Clause
bcrypt2,951,6887,7351.11 MB257ヶ月前MIT
sha1700,507107-011年前BSD-3-Clause
sha25670,30847-411年前-
機能比較: crypto-js vs md5 vs bcrypt vs sha1 vs sha256

セキュリティ強度

  • crypto-js:

    crypto-jsは、AESやDESなどの強力な暗号化アルゴリズムをサポートしており、データの暗号化において高いセキュリティを提供します。ただし、実装の際には適切な鍵管理が必要です。

  • md5:

    md5は、かつては広く使用されていましたが、現在では脆弱性が発見されており、セキュリティ用途には適していません。データの整合性チェックには使用できますが、パスワードのハッシュ化には推奨されません。

  • bcrypt:

    bcryptは、パスワードのハッシュ化において非常に高いセキュリティを提供します。動的なソルト生成とコストファクターを使用して、ハッシュ化の難易度を調整できるため、ブルートフォース攻撃に対して強力です。

  • sha1:

    sha1は、md5よりも強力ですが、現在では脆弱性が指摘されています。セキュリティが重要な用途には適しておらず、古いシステムとの互換性がある場合にのみ使用されるべきです。

  • sha256:

    sha256は、SHA-2ファミリーの一部であり、非常に高いセキュリティを提供します。現在のセキュリティ基準において推奨されるハッシュアルゴリズムであり、データの整合性を高めるために使用されます。

パフォーマンス

  • crypto-js:

    crypto-jsは、クライアントサイドでの暗号化において高速なパフォーマンスを提供しますが、暗号化アルゴリズムによっては計算コストが高くなることがあります。

  • md5:

    md5は、非常に高速なハッシュアルゴリズムであり、軽量な処理が求められる場合に適していますが、セキュリティが重要な場合には不適切です。

  • bcrypt:

    bcryptは、ハッシュ化に時間がかかるため、パフォーマンスが低下する可能性がありますが、セキュリティを重視する場合にはこのトレードオフが許容されます。

  • sha1:

    sha1は、md5よりもやや遅いですが、依然として比較的高速です。ただし、セキュリティ上の理由から新しいプロジェクトには推奨されません。

  • sha256:

    sha256は、SHA-2ファミリーの中で最も強力なハッシュアルゴリズムの一つであり、パフォーマンスはmd5やsha1に比べてやや低下しますが、セキュリティを重視する場合には適しています。

使用シナリオ

  • crypto-js:

    crypto-jsは、クライアントサイドでのデータ暗号化や復号化に使用され、特にウェブアプリケーションでのデータ保護に役立ちます。

  • md5:

    md5は、ファイルの整合性チェックやデータベースのレコードのハッシュ値生成に使用されますが、セキュリティが重要な場合には不適切です。

  • bcrypt:

    bcryptは、ユーザーのパスワードを安全に保存するために使用されます。特に、ユーザー認証システムにおいて強力なハッシュ化が必要な場合に最適です。

  • sha1:

    sha1は、古いシステムとの互換性が必要な場合や、データの整合性チェックに使用されますが、セキュリティが重要な用途には推奨されません。

  • sha256:

    sha256は、データの整合性を確保するために使用され、特にセキュリティが重視されるシナリオでの使用が推奨されます。

学習曲線

  • crypto-js:

    crypto-jsは、さまざまな暗号化アルゴリズムをサポートしているため、初めて使用する際には学習曲線があるかもしれませんが、ドキュメントが充実しています。

  • md5:

    md5は、非常にシンプルなハッシュアルゴリズムであり、学習曲線はほとんどありません。すぐに使用を開始できますが、セキュリティの観点からは注意が必要です。

  • bcrypt:

    bcryptは、比較的シンプルなAPIを提供しており、使用方法を学ぶのは容易ですが、セキュリティのベストプラクティスを理解する必要があります。

  • sha1:

    sha1は、md5に似たシンプルなAPIを持っており、学習曲線は低いですが、セキュリティの観点からは注意が必要です。

  • sha256:

    sha256は、SHA-2ファミリーの一部であり、学習曲線はややありますが、セキュリティの観点からは非常に重要です。

選び方: crypto-js vs md5 vs bcrypt vs sha1 vs sha256
  • crypto-js:

    crypto-jsは、さまざまな暗号化アルゴリズムをサポートしており、データの暗号化や復号化が必要な場合に選択します。特に、クライアントサイドでのデータ暗号化が必要な場合に便利です。

  • md5:

    md5は、データの整合性チェックやファイルのハッシュ値を生成するために使用されますが、セキュリティが重要な場合には推奨されません。軽量で高速なハッシュ化が必要な場合に選択します。

  • bcrypt:

    bcryptは、パスワードのハッシュ化に特化しており、セキュリティが最も重要な場合に選択するべきです。特に、パスワードのストレージにおいて強力なハッシュ化を必要とする場合に適しています。

  • sha1:

    sha1は、md5よりも強力なハッシュアルゴリズムですが、現在では脆弱性が指摘されています。古いシステムとの互換性が必要な場合に選択しますが、新しいプロジェクトには推奨されません。

  • sha256:

    sha256は、SHA-2ファミリーの一部であり、非常に強力なハッシュアルゴリズムです。セキュリティが最も重要な場合や、データの整合性を高める必要がある場合に選択します。

crypto-js のREADME

crypto-js

JavaScript library of crypto standards.

Discontinued

Active development of CryptoJS has been discontinued. This library is no longer maintained.

Nowadays, NodeJS and modern browsers have a native Crypto module. The latest version of CryptoJS already uses the native Crypto module for random number generation, since Math.random() is not crypto-safe. Further development of CryptoJS would result in it only being a wrapper of native Crypto. Therefore, development and maintenance has been discontinued, it is time to go for the native crypto module.

Node.js (Install)

Requirements:

  • Node.js
  • npm (Node.js package manager)
npm install crypto-js

Usage

ES6 import for typical API call signing use case:

import sha256 from 'crypto-js/sha256';
import hmacSHA512 from 'crypto-js/hmac-sha512';
import Base64 from 'crypto-js/enc-base64';

const message, nonce, path, privateKey; // ...
const hashDigest = sha256(nonce + message);
const hmacDigest = Base64.stringify(hmacSHA512(path + hashDigest, privateKey));

Modular include:

var AES = require("crypto-js/aes");
var SHA256 = require("crypto-js/sha256");
...
console.log(SHA256("Message"));

Including all libraries, for access to extra methods:

var CryptoJS = require("crypto-js");
console.log(CryptoJS.HmacSHA1("Message", "Key"));

Client (browser)

Requirements:

  • Node.js
  • Bower (package manager for frontend)
bower install crypto-js

Usage

Modular include:

require.config({
    packages: [
        {
            name: 'crypto-js',
            location: 'path-to/bower_components/crypto-js',
            main: 'index'
        }
    ]
});

require(["crypto-js/aes", "crypto-js/sha256"], function (AES, SHA256) {
    console.log(SHA256("Message"));
});

Including all libraries, for access to extra methods:

// Above-mentioned will work or use this simple form
require.config({
    paths: {
        'crypto-js': 'path-to/bower_components/crypto-js/crypto-js'
    }
});

require(["crypto-js"], function (CryptoJS) {
    console.log(CryptoJS.HmacSHA1("Message", "Key"));
});

Usage without RequireJS

<script type="text/javascript" src="path-to/bower_components/crypto-js/crypto-js.js"></script>
<script type="text/javascript">
    var encrypted = CryptoJS.AES(...);
    var encrypted = CryptoJS.SHA256(...);
</script>

API

See: https://cryptojs.gitbook.io/docs/

AES Encryption

Plain text encryption

var CryptoJS = require("crypto-js");

// Encrypt
var ciphertext = CryptoJS.AES.encrypt('my message', 'secret key 123').toString();

// Decrypt
var bytes  = CryptoJS.AES.decrypt(ciphertext, 'secret key 123');
var originalText = bytes.toString(CryptoJS.enc.Utf8);

console.log(originalText); // 'my message'

Object encryption

var CryptoJS = require("crypto-js");

var data = [{id: 1}, {id: 2}]

// Encrypt
var ciphertext = CryptoJS.AES.encrypt(JSON.stringify(data), 'secret key 123').toString();

// Decrypt
var bytes  = CryptoJS.AES.decrypt(ciphertext, 'secret key 123');
var decryptedData = JSON.parse(bytes.toString(CryptoJS.enc.Utf8));

console.log(decryptedData); // [{id: 1}, {id: 2}]

List of modules

  • crypto-js/core
  • crypto-js/x64-core
  • crypto-js/lib-typedarrays

  • crypto-js/md5
  • crypto-js/sha1
  • crypto-js/sha256
  • crypto-js/sha224
  • crypto-js/sha512
  • crypto-js/sha384
  • crypto-js/sha3
  • crypto-js/ripemd160

  • crypto-js/hmac-md5
  • crypto-js/hmac-sha1
  • crypto-js/hmac-sha256
  • crypto-js/hmac-sha224
  • crypto-js/hmac-sha512
  • crypto-js/hmac-sha384
  • crypto-js/hmac-sha3
  • crypto-js/hmac-ripemd160

  • crypto-js/pbkdf2

  • crypto-js/aes
  • crypto-js/tripledes
  • crypto-js/rc4
  • crypto-js/rabbit
  • crypto-js/rabbit-legacy
  • crypto-js/evpkdf

  • crypto-js/format-openssl
  • crypto-js/format-hex

  • crypto-js/enc-latin1
  • crypto-js/enc-utf8
  • crypto-js/enc-hex
  • crypto-js/enc-utf16
  • crypto-js/enc-base64

  • crypto-js/mode-cfb
  • crypto-js/mode-ctr
  • crypto-js/mode-ctr-gladman
  • crypto-js/mode-ofb
  • crypto-js/mode-ecb

  • crypto-js/pad-pkcs7
  • crypto-js/pad-ansix923
  • crypto-js/pad-iso10126
  • crypto-js/pad-iso97971
  • crypto-js/pad-zeropadding
  • crypto-js/pad-nopadding

Release notes

4.2.0

Change default hash algorithm and iteration's for PBKDF2 to prevent weak security by using the default configuration.

Custom KDF Hasher

Blowfish support

4.1.1

Fix module order in bundled release.

Include the browser field in the released package.json.

4.1.0

Added url safe variant of base64 encoding. 357

Avoid webpack to add crypto-browser package. 364

4.0.0

This is an update including breaking changes for some environments.

In this version Math.random() has been replaced by the random methods of the native crypto module.

For this reason CryptoJS might not run in some JavaScript environments without native crypto module. Such as IE 10 or before or React Native.

3.3.0

Rollback, 3.3.0 is the same as 3.1.9-1.

The move of using native secure crypto module will be shifted to a new 4.x.x version. As it is a breaking change the impact is too big for a minor release.

3.2.1

The usage of the native crypto module has been fixed. The import and access of the native crypto module has been improved.

3.2.0

In this version Math.random() has been replaced by the random methods of the native crypto module.

For this reason CryptoJS might does not run in some JavaScript environments without native crypto module. Such as IE 10 or before.

If it's absolute required to run CryptoJS in such an environment, stay with 3.1.x version. Encrypting and decrypting stays compatible. But keep in mind 3.1.x versions still use Math.random() which is cryptographically not secure, as it's not random enough.

This version came along with CRITICAL BUG.

DO NOT USE THIS VERSION! Please, go for a newer version!

3.1.x

The 3.1.x are based on the original CryptoJS, wrapped in CommonJS modules.