ホームページ >ウェブフロントエンド >jsチュートリアル >Nodejs での暗号モジュールの使用法を 1 つの記事で素早く理解する

Nodejs での暗号モジュールの使用法を 1 つの記事で素早く理解する

青灯夜游
青灯夜游転載
2021-07-13 16:33:425966ブラウズ

crypto は、node.js に暗号化と復号化を実装するモジュールです。この記事では、crypto モジュールについて説明し、ハッシュ (ハッシュ) アルゴリズム、HMAC アルゴリズム、対称暗号化方式と非対称暗号化方式。

Nodejs での暗号モジュールの使用法を 1 つの記事で素早く理解する

1. crypto

crypto は、node.js# での暗号化の実装です。 ## および復号化モジュール、node.js では、OpenSSL クラス ライブラリが暗号化と復号化を内部的に実装する手段として使用されます。厳密にテストされた暗号化および復号化アルゴリズムの実装ツール。 [推奨学習: 「nodejs チュートリアル 」]Windows バージョン openSSL ダウンロード

http://dl.pconline.com.cn/download/355862- 1.html

2. ハッシュ (ハッシュ) アルゴリズム

ハッシュ アルゴリズムはハッシュ アルゴリズムとも呼ばれ、任意の長さの入力を次のように変換するために使用されます。固定長出力。一般的な出力には md5、sha1 などが含まれます。

同じ入力は同じ出力を生成します

    異なる出力は異なる出力を生成します
  • 出力の長さはどの入力長でも同じです
  • 入力値を出力から推測することはできません

Nodejs での暗号モジュールの使用法を 1 つの記事で素早く理解する2.1 すべてのハッシュを取得するアルゴリズム

console.log(crypto.getHashes());
2.2 構文の説明

crypto.createHash(algorithm);//创建HASH对象
hash.update(data,[input_encoding]);//增加要添加摘要的数据,摘要输出前可以使用多次update
hash.digest([encoding]);//输出摘要内容,输出后则不能再添加摘要内容
2.3 ハッシュ アルゴリズムの例

var crypto = require('crypto');
var md5 = crypto.createHash('md5');//返回哈希算法
var md5Sum = md5.update('hello');//指定要摘要的原始内容,可以在摘要被输出之前使用多次update方法来添加摘要内容
var result = md5Sum.digest('hex');//摘要输出,在使用digest方法之后不能再向hash对象追加摘要内容。
console.log(result);
複数の更新
var fs = require('fs');
var shasum = crypto.createHash('sha1');//返回sha1哈希算法
var rs = fs.createReadStream('./readme.txt');
rs.on('data', function (data) {
    shasum.update(data);//指定要摘要的原始内容,可以在摘要被输出之前使用多次update方法来添加摘要内容
});
rs.on('end', function () {
    var result = shasum.digest('hex');//摘要输出,在使用digest方法之后不能再向hash对象追加摘要内容。
    console.log(result);
})

3. HMAC アルゴリズム

##HMAC アルゴリズムは、ハッシュ アルゴリズムとキーを組み合わせて、署名の整合性への損傷を防ぎます

##3.1 構文

Nodejs での暗号モジュールの使用法を 1 つの記事で素早く理解する

let hmac crypto.createHmac(algorithm,key);
hmac.update(data);

algorithm は、sha1、md5、sha256 などの利用可能なダイジェスト アルゴリズムです。key は、1 つの文字列で、 PEM 形式のキー

  • 3.2 秘密キーの生成
PEM は OpenSSL の標準形式であり、OpenSSL は PEM ファイル形式を使用して証明書とキーを保存します、Base64 でエンコードされた証明書に基づいています。

$ openssl genrsa -out rsa_private.key 1024
3.3 例

let pem = fs.readFileSync(path.join(__dirname, './rsa_private.key'));
let key = pem.toString('ascii');
let hmac = crypto.createHmac('sha1', key);
let rs = fs.createReadStream(path.join(__dirname, './1.txt'));
rs.on('data', function (data) {
    hmac.update(data);
});
rs.on('end', function () {
    let result = hmac.digest('hex');
    console.log(result);
});

4. 対称暗号化

blowfish アルゴリズムは対称暗号化アルゴリズムです。暗号化と復号化に同じキーが使用されることを意味します。

    #
    var crypto = require('crypto');
    var fs = require('fs');
    let str = 'hello';
    let cipher = crypto.createCipher('blowfish', fs.readFileSync(path.join(__dirname, 'rsa_private.key')));
    let encry = cipher.update(str, 'utf8','hex');
    encry += cipher.final('hex');
    console.log(encry);
    
    let deciper = crypto.createDecipher('blowfish', fs.readFileSync(path.join(__dirname, 'rsa_private.key')));
    let deEncry = deciper.update(encry, 'hex','utf8');
    deEncry += deciper.final('utf8');
    console.log(deEncry);
  • 5. 非対称暗号化アルゴリズム

Nodejs での暗号モジュールの使用法を 1 つの記事で素早く理解する

非対称暗号化アルゴリズムには 2 つのキーが必要です: 公開キー ( publickey) と秘密鍵 (privatekey)

公開鍵と秘密鍵はペアです。公開鍵がデータの暗号化に使用される場合、対応する秘密鍵のみを使用して復号化できます。キーは暗号化され、公開キーの復号のみが行われます。

暗号化と復号には 2 つの異なるキーが使用されるため、このアルゴリズムは非対称暗号化アルゴリズムと呼ばれます
  • ##Create秘密鍵の公開鍵
  • openssl rsa -in rsa_private.key -pubout -out rsa_public.key
    var crypto = require('crypto');
    var fs = require('fs');
    let key = fs.readFileSync(path.join(__dirname, 'rsa_private.key'));
    let cert = fs.readFileSync(path.join(__dirname, 'rsa_public.key'));
    let secret = crypto.publicEncrypt(cert, buffer);//公钥加密
    let result = crypto.privateDecrypt(key, secret);//私钥解密
    console.log(result.toString());

6. 署名Nodejs での暗号モジュールの使用法を 1 つの記事で素早く理解する

ネットワークでは、秘密鍵の所有者は送信前にデータに署名できます。データが

署名

され、署名が取得され、データがネットワーク経由でデータ受信者に送信されると、データ受信者は 公開鍵を使用して署名を検証し、これを確実に行うことができます。データ 秘密キーの所有者によって送信された元のデータであり、ネットワーク上での送信中に変更されていません。

let private = fs.readFileSync(path.join(__dirname, 'rsa_private.key'), 'ascii');
let public = fs.readFileSync(path.join(__dirname, 'rsa_public.key'), 'ascii');
let str = 'zhufengpeixun';
let sign = crypto.createSign('RSA-SHA256');
sign.update(str);
let signed = sign.sign(private, 'hex');
let verify = crypto.createVerify('RSA-SHA256');
verify.update(str);
let verifyResult = verify.verify(public,signed,'hex'); //true
元のアドレス: https://juejin.cn/post/6844903800491376653

Nodejs での暗号モジュールの使用法を 1 つの記事で素早く理解するプログラミング関連の知識について詳しくは、こちらをご覧ください。アクセス:

プログラミングビデオ
! !

以上がNodejs での暗号モジュールの使用法を 1 つの記事で素早く理解するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はjuejin.cnで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。