NodeJs簡明教程(6)
NodeJs簡明教程はゼロからNodeJs関連の知識を学び、JS開発者を支援して全スタック開発技術スタックを構築します.
本論文はNodeJs簡明教程の第六編で、NodeJs cryptモジュール関連の基本的な操作を紹介します.
cryptモジュールは、OpenSSLのハッシュ、HMAC、暗号化、解読、署名、検証機能を含む暗号化機能を提供する.
ハッピー
Hashクラスは、データ・ハッシュ値を作成するためのツールクラスである.
ハッシュアルゴリズムは厳密には暗号化アルゴリズムに属しておらず、従来の暗号化は復号化と対になっている.ハッシュアルゴリズムは、ハッシュされたコンテンツが改竄されないことを保証することができる.任意の長さに対する入力データは、固定ビット数のハッシュ値を生成することができる.
cryptモジュールはhashの動作に対して一致しており、アルゴリズム名が一致しない以外に、ここではmd 5とshar 1を例としている.
MD 5
Base 64コード
Hmacクラスは、Hmac要約を暗号化するためのツールです.
Hmacアルゴリズムもhashアルゴリズムであるが、同じ入力に対して鍵が必要であり、従来のhashアルゴリズム出力は固定されている.しかし、Hmacの出力は鍵によって異なります.
AESは共通の対称暗号アルゴリズムであり、暗号解読を加えて同じ鍵を使う.
AES暗号化 でありうる. に対応する. に対応する. に対応する.
AES復号
RSA
RSAアルゴリズムは、秘密鍵と公開鍵のペアで構成される非対称暗号化アルゴリズムであり、秘密鍵を暗号化したり、公開鍵を復号したり、公開鍵を通じて暗号化したり、秘密鍵を復号したりする.公開鍵は公開されてもよく、秘密鍵は秘密でなければならない.
鍵ペアを生成
RSAアルゴリズムを使用する前に、鍵ペアを提供しなければならない.本明細書では を生成する. を導出する.
このように現在のディレクトリで
RSA暗号化
よく使われる復号化、ハッシュ、暗号化の使い方はすでに紹介済みです.読んだら疑問があります.WeChatグループを追加して検討してください.
本論文はNodeJs簡明教程の第六編で、NodeJs cryptモジュール関連の基本的な操作を紹介します.
cryptモジュールは、OpenSSLのハッシュ、HMAC、暗号化、解読、署名、検証機能を含む暗号化機能を提供する.
ハッピー
Hashクラスは、データ・ハッシュ値を作成するためのツールクラスである.
ハッシュアルゴリズムは厳密には暗号化アルゴリズムに属しておらず、従来の暗号化は復号化と対になっている.ハッシュアルゴリズムは、ハッシュされたコンテンツが改竄されないことを保証することができる.任意の長さに対する入力データは、固定ビット数のハッシュ値を生成することができる.
cryptモジュールはhashの動作に対して一致しており、アルゴリズム名が一致しない以外に、ここではmd 5とshar 1を例としている.
MD 5
const crypto = require('crypto');
const hash = crypto.createHash('md5'); // MD5 hash
hash.update('111111'); // hash
console.log(hash.digest('hex'));
以上のルーチン出力96e79218965eb72c92a549dd5a330112
SHA 1const crypto = require('crypto');
const hash = crypto.createHash('sha1'); // MD5 hash
hash.update('111111'); // hash
console.log(hash.digest('hex'));
以上のルーチン出力3d4f2bf07dc1be38b20cd6e46949a1071f9d0e3d
Base 64Base64
はcrypto
モジュールのメンバーではありませんが、本節の内容と近いので置いてきました.Base 64は符号化アルゴリズムのセットであり、バイナリデータ符号化でよく用いられる.Base 64コード
const data = '111111';
const encodedData = Buffer.from(data, 'utf8').toString('base64'); // utf8, base64
console.log(encodedData);
以上のルーチン出力MTExMTEx
Base 64デコードconst data = 'MTExMTEx';
const decodedData = Buffer.from(data, 'base64').toString('utf8'); // base64, utf8
console.log(decodedData);
以上のルーチン出力111111
HmacHmacクラスは、Hmac要約を暗号化するためのツールです.
Hmacアルゴリズムもhashアルゴリズムであるが、同じ入力に対して鍵が必要であり、従来のhashアルゴリズム出力は固定されている.しかし、Hmacの出力は鍵によって異なります.
const crypto = require('crypto');
const hmac = crypto.createHmac('sha256', 'secret-key');
hmac.update('Hello, world!');
console.log(hmac.digest('hex'));
以上のルーチン出力f4d850b1017eb4e20e0c58443919033c90cc9f4fe889b4d6b4572a4a0ec2d08a
AESAESは共通の対称暗号アルゴリズムであり、暗号解読を加えて同じ鍵を使う.
AES暗号化
const crypto = require('crypto');
const cipher = crypto.createCipheriv('aes192', '111111111111111111111111', '1111111111111111')
var crypted = cipher.update('1', 'utf8', 'hex');
crypted += cipher.final('hex');
console.log(crypted);
以上のルーチン出力5bb3e6eb39e502b5fa74d93796087efa
説明:createCipheriv
の原型は以下の通りである.crypto.createCipheriv(algorithm,key,iv [,options])
iv
は初期化ベクトルであり、空または16バイトの文字列key
は暗号鍵であり、選択されたアルゴリズムによって鍵の長さが異なり、対応する関係は以下の通りである.aes128
は、16
長鍵aes192
は、24
の長さの秘密鍵aes256
は、32
長鍵AES復号
const crypto = require('crypto');
const cipher = crypto.createDecipheriv('aes192', '111111111111111111111111', '1111111111111111')
var data = cipher.update('5bb3e6eb39e502b5fa74d93796087efa', 'hex', 'utf8'); // hex(16 ), utf8
data += cipher.final('utf8');
console.log(data);
以上のルーチン出力1
crypto.createDecipheriv
方法のプロトタイプはcrypto.createCipher
と一致しており、ここでは詳細に説明していない.RSA
RSAアルゴリズムは、秘密鍵と公開鍵のペアで構成される非対称暗号化アルゴリズムであり、秘密鍵を暗号化したり、公開鍵を復号したり、公開鍵を通じて暗号化したり、秘密鍵を復号したりする.公開鍵は公開されてもよく、秘密鍵は秘密でなければならない.
鍵ペアを生成
RSAアルゴリズムを使用する前に、鍵ペアを提供しなければならない.本明細書では
openssl
コマンドを使用して生成する.openssl genrsa -out private.pem 2048
は、2048
の長さの
openssl rsa -in private.pem -pubout -out public.pem
は、公開鍵このように現在のディレクトリで
private.pem
とpublic.pem
を取得しました.RSA暗号化
const crypto = require('crypto');
const fs = require('fs');
const privateKey = fs.readFileSync('./private.pem', { encoding: 'utf8' });
const encodedData = crypto.privateEncrypt(privateKey, Buffer.from('111111','utf8')); // utf8
console.log(encodedData.toString('hex'));
以上のルーチン出力44a1b50b9639e4cbe17d55ca57dcb041387acadae3d3721fd9803a3a33091a36d59977feaa6caad990e58b9542c26297de6014e20819f0a71eadd0793bfe0fac834f30d2a05f8b329a3b2409e9f8b7fbd7de3734ada00228b84027568be58a2a34ccf0c4a8b2d02c58eef510931423ed5f40c696361b606df11609248b271aebcd17f9a113f98a8fa86c9c45bd609256f4779ce01ea3027171fffb35e695f1c38553aecafb72a2f46a9012246fde0f2934eacba8932bca38e228f4f4294873ed75d9acf79ab854897ebaab2375384b2da682c1b2e2b49b0592929067b3d5a11971d912629a178691345f7f88137343588b5c51d60643e5c00998484727b8c4a8
RSA復号const crypto = require('crypto');
const fs = require('fs');
const publicKey = fs.readFileSync('./public.pem', { encoding: 'utf8' });
const encodedData = '44a1b50b9639e4cbe17d55ca57dcb041387acadae3d3721fd9803a3a33091a36d59977feaa6caad990e58b9542c26297de6014e20819f0a71eadd0793bfe0fac834f30d2a05f8b329a3b2409e9f8b7fbd7de3734ada00228b84027568be58a2a34ccf0c4a8b2d02c58eef510931423ed5f40c696361b606df11609248b271aebcd17f9a113f98a8fa86c9c45bd609256f4779ce01ea3027171fffb35e695f1c38553aecafb72a2f46a9012246fde0f2934eacba8932bca38e228f4f4294873ed75d9acf79ab854897ebaab2375384b2da682c1b2e2b49b0592929067b3d5a11971d912629a178691345f7f88137343588b5c51d60643e5c00998484727b8c4a8';
const rawData = crypto.publicDecrypt(publicKey, Buffer.from(encodedData, 'hex')); // hex(16 )
console.log(rawData.toString('utf8'));
以上のルーチン出力111111
おわりによく使われる復号化、ハッシュ、暗号化の使い方はすでに紹介済みです.読んだら疑問があります.WeChatグループを追加して検討してください.