>  기사  >  웹 프론트엔드  >  한 기사로 Nodejs의 암호화 모듈 사용법을 빠르게 이해하세요.

한 기사로 Nodejs의 암호화 모듈 사용법을 빠르게 이해하세요.

青灯夜游
青灯夜游앞으로
2021-07-13 16:33:425908검색

crypto는 node.js에서 암호화 및 복호화를 구현하는 모듈입니다. 다음 글에서는 암호화 모듈을 소개하고 해싱(해시) 알고리즘, HMAC 알고리즘, 대칭 암호화 및 비대칭에 암호화 모듈을 사용하는 방법을 소개합니다. 암호화 방법.

한 기사로 Nodejs의 암호화 모듈 사용법을 빠르게 이해하세요.

1.crypto

cryptonode.js中实现加密和解密的模块,在node.js中,使用OpenSSL类库作为内部实现加密解密的手段, OpenSSL는 엄격한 테스트를 거쳐 안정적인 암호화 및 복호화 알고리즘 구현 도구입니다. [추천 학습: "nodejs 튜토리얼"]

windows 버전 openSSL 다운로드

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

2.

해시 알고리즘은 해시 알고리즘이라고도 하며, 모든 길이의 입력을 고정 길이 출력으로 변환하는 데 사용됩니다. 일반적인 알고리즘으로는 md5, sha1 등이 있습니다.

  • 동일한 입력은 동일한 출력을 생성합니다
  • 다르다 출력은 다른 출력을 생성합니다
  • 출력 길이는 모든 입력 길이에 대해 동일합니다
  • 입력 값을 출력에서 ​​추론할 수 없습니다

한 기사로 Nodejs의 암호화 모듈 사용법을 빠르게 이해하세요.

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 알고리즘은 해싱 알고리즘과 키를 결합하여 서명 무결성 손상을 방지합니다

한 기사로 Nodejs의 암호화 모듈 사용법을 빠르게 이해하세요.

3.1 구문

let hmac crypto.createHmac(algorithm,key);
hmac.update(data);
  • algorithm은 sha1, md5, sha256과 같은 사용 가능한 다이제스트 알고리즘입니다.
  • key는 PEM 형식의 키를 지정하는 데 사용되는 문자열입니다.

3.2 개인 키 생성

PEM은 다음의 표준 형식입니다. 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. 대칭 암호화

  • 복어 알고리즘은 대칭 암호화 알고리즘입니다.

한 기사로 Nodejs의 암호화 모듈 사용법을 빠르게 이해하세요.

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. 비대칭 암호화 알고리즘

  • 비대칭 암호화 알고리즘에는 공개 키(publickey)와 개인 키(privatekey) 두 개의 키가 필요합니다.
  • 공개 키와 개인 키가 하나인 경우 예, 공개키로 암호화되면 해당 개인키로만 복호화할 수 있고, 개인키로 암호화하면 공개키로만 복호화가 가능하기 때문에 이 알고리즘을 비대칭 암호화라고 합니다. 알고리즘

한 기사로 Nodejs의 암호화 모듈 사용법을 빠르게 이해하세요.개인 키에 대한 공개 키 만들기

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. 서명

네트워크에서 개인 키 소유자는 데이터가 전송되기 전에 데이터에 서명할 수 있습니다. 서명하고 네트워크를 통해 데이터 수신자에게 데이터를 전송하면 데이터 수신자는

공개 키

를 통해 서명을 확인하여 이 데이터가 개인 키 소유자가 보낸 원본 데이터이고 전송 중에 수정되지 않았는지 확인할 수 있습니다. 네트워크를 통해.

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의 암호화 모듈 사용법을 빠르게 이해하세요.

더 많은 프로그래밍 관련 지식을 보시려면

프로그래밍 영상

을 방문해 주세요! !

위 내용은 한 기사로 Nodejs의 암호화 모듈 사용법을 빠르게 이해하세요.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 juejin.cn에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제