모듈암호화
crypto
모듈은 fibjs
내장된 암호화 알고리즘 모듈입니다. 대칭 암호화, 비대칭 암호화, 다이제스트 알고리즘, 암호화 난수 생성기 및 기타 기능을 제공합니다. 사용하기 전에 require('crypto')
모듈을 를 통해 로드해야 합니다.
crypto
모듈 에는 다음과 같은 다양한 개체를 사용할 수 있습니다.
PKey
: 비대칭 암호화 알고리즘 객체X509Cert
: X.509 인증서를 조작하는 데 사용되는 개체Cipher
: 대칭암호를 구현하는데 사용되는 객체Digest
: 다이제스트 알고리즘을 구현하는 데 사용되는 객체
암호화 알고리즘을 사용하기 전에 키 객체를 생성해야 합니다. 예를 들어 다음 AES
예에서는 키 객체를 생성합니다.
1
2const crypto = require('crypto');
const key = crypto.randomBytes(16); // generate a 16-byte random key
다음으로 Cipher
객체를 사용하여 일반 텍스트를 암호화합니다.
1
2
3
4const c = new crypto.Cipher(crypto.AES, crypto.ECB, key);
const data = 'hello, world';
const encrypted = c.encrypt(data).hex();
console.log(encrypted); // output encrypted data
AES
위의 예에서는 암호화된 Cipher
객체가 생성되고 , encrypt
해당 메서드를 사용하여 일반 텍스트가 암호화되고, 암호화 결과가 반환됩니다.
대칭 암호화 알고리즘 외에도 crypto
모듈은 비대칭 암호화 알고리즘 및 다이제스트 알고리즘도 지원할 수 있습니다. 예를 들어 다음 예는 SHA256 암호화를 구현하기 위해 PKey
및 개체를 사용하는 코드입니다.Digest
1
2
3
4
5
6const privateKey = crypto.loadPKey('private.pem'); // read private key from file
const data = 'hello, world';
const digest = new crypto.Digest(hash.SHA256);
digest.update(data);
const signature = privateKey.sign(digest.digest());
console.log(signature); // output signature
위의 예에서는 먼저 개인 키 파일을 읽고 입력 데이터를 준비합니다. 그런 다음 SHA256 Digest
개체가 생성되고 update
해당 메서드를 사용하여 해시 계산에 데이터가 추가됩니다. 계산이 완료된 후 privateKey.sign
해당 메소드를 이용하여 서명 결과를 출력합니다.
요약하자면, crypto
모듈은 다양한 암호화 알고리즘, 다이제스트 알고리즘 및 관련 객체를 제공하며, 이러한 기능은 대칭 및 비대칭 암호화, 디지털 서명 및 암호화 검증과 같은 다양한 보안 요구 사항을 달성하는 데 도움이 될 수 있습니다.
물체
Cipher
1Cipher crypto.Cipher;
PKey
1PKey crypto.PKey;
ECKey
1ECKey crypto.ECKey;
BlsKey
1BlsKey crypto.BlsKey;
X509Cert
1X509Cert crypto.X509Cert;
X509Crl
1X509Crl crypto.X509Crl;
X509Req
1X509Req crypto.X509Req;
정적 함수
createHash
주어진 알고리즘 이름을 기반으로 정보 요약 개체를 생성합니다.
1static Digest crypto.createHash(String algo);
호출 매개변수:
- algo: 정보 다이제스트 객체의 알고리즘을 지정하는 문자열
결과 반환:
- Digest, 정보 요약 객체를 반환합니다.
createHmac
주어진 알고리즘 이름을 기반으로 hmac 정보 요약 개체를 생성합니다.
1
2static Digest crypto.createHmac(String algo,
Buffer key);
호출 매개변수:
- algo: 정보 다이제스트 객체의 알고리즘을 지정하는 문자열
- key:Buffer, 바이너리 서명 키
결과 반환:
- Digest, 정보 요약 객체를 반환합니다.
loadCert
여러 번 호출할 수 있는 CRT/PEM/DER 형식의 인증서 로드
1static X509Cert crypto.loadCert(String filename);
호출 매개변수:
- filename: 문자열, 인증서 파일 이름
결과 반환:
- X509Cert, 인증서가 포함된 객체를 반환합니다.
loadCrl
여러 번 호출할 수 있는 PEM/DER 형식으로 해지 인증서 로드
1static X509Crl crypto.loadCrl(String filename);
호출 매개변수:
- filename: 문자열, 해지 인증서 파일 이름
결과 반환:
- X509Crl, 해지된 인증서가 포함된 객체를 반환합니다.
loadReq
여러 번 호출할 수 있는 PEM/DER 형식으로 인증서 요청을 로드합니다.
1static X509Req crypto.loadReq(String filename);
호출 매개변수:
- filename: 문자열, 인증서 요청 파일 이름
결과 반환:
- X509Req, 요청된 인증서가 포함된 객체를 반환합니다.
loadPKey
CRT/PEM/DER 형식의 비대칭 공개 또는 개인 키 로드
1static PKey crypto.loadPKey(String filename);
호출 매개변수:
- filename: 문자열, 공개 키 또는 개인 키 파일 이름
결과 반환:
randomBytes
헤이지 생성기를 사용하여 지정된 크기의 난수 생성
1static Buffer crypto.randomBytes(Integer size = 16) async;
호출 매개변수:
- size: 정수, 생성되는 난수의 크기를 지정합니다.
결과 반환:
- Buffer, 생성된 난수를 반환합니다.
simpleRandomBytes
빠른 알고리즘을 사용하여 지정된 크기의 저강도 난수 생성
1static Buffer crypto.simpleRandomBytes(Integer size = 16) async;
호출 매개변수:
- size: 정수, 생성되는 난수의 크기를 지정합니다.
결과 반환:
- Buffer, 생성된 난수를 반환합니다.
pseudoRandomBytes
엔트로피 생성기를 사용하여 지정된 크기의 의사 난수 생성
1static Buffer crypto.pseudoRandomBytes(Integer size = 16) async;
호출 매개변수:
- size: 정수, 생성되는 난수의 크기를 지정합니다.
결과 반환:
- Buffer, 생성된 난수를 반환합니다.
randomFill
난수를 사용하여 지정된 값을 채웁니다.Buffer, Havege 생성기를 사용하여
1
2
3static Buffer crypto.randomFill(Buffer buffer,
Integer offset = 0,
Integer size = -1) async;
호출 매개변수:
- buffer:Buffer, 생성된Buffer
- offset: 정수, 시작 오프셋을 지정합니다. 기본값은 0입니다.
- size: 정수, 생성된 난수의 크기를 지정합니다. 기본값은 buffer.length - 오프셋입니다.
결과 반환:
- Buffer, 생성된 난수를 반환합니다.
randomArt
주어진 데이터의 시각적 문자 이미지를 생성합니다.
1
2
3static String crypto.randomArt(Buffer data,
String title,
Integer size = 8);
호출 매개변수:
- data:Buffer, 표시할 데이터를 지정합니다.
- title: 문자열, 문자 이미지의 제목을 지정합니다. 멀티바이트 문자는 너비 오류를 발생시킵니다.
- size: 정수, 문자 이미지 크기
결과 반환:
- String, 생성된 시각적 문자열 이미지를 반환합니다.
generateKey
RSA 개인 키 생성
1static PKey crypto.generateKey(Integer size) async;
호출 매개변수:
- size: 정수, RSA 키 길이를 비트 단위로 지정합니다.
결과 반환:
- PKey, 생성된 개인 키가 포함된 객체를 반환합니다.
타원 곡선 개인 키 생성
1static PKey crypto.generateKey(String curve = "secp521r1") async;
호출 매개변수:
- curve: 문자열, 미리 설정된 타원 곡선을 지정합니다. 기본값은 'secp256r1'입니다.
결과 반환:
- PKey, 생성된 개인 키가 포함된 객체를 반환합니다.
곡선 선택적 곡선에는 다음과 같은 NIST 곡선과 별칭이 포함됩니다.
곡선 | 별명 |
---|---|
NIST P-192 | 'NIST P-192', 'p192', 'P-192', 'prime192v1', 'secp192r1' |
NIST P-224 | 'NIST P-224', 'p224', 'P-224', 'prime224v1', 'secp224r1' |
NIST P-256 | 'NIST P-256', 'p256', 'P-256', 'prime256v1', 'secp256r1' |
NIST P-384 | 'NIST P-384', 'p384', 'P-384', 'prime384v1', 'secp384r1' |
NIST P-521 | 'NIST P-521', 'p521', 'P-521', 'prime521v1', 'secp521r1' |
기타 지원되는 곡선에는 "brainpoolP512r1", "brainpoolP384r1", "secp256k1", "P-256K", "brainpoolP256r1", "sm2p256r1", "SM2", "Ed25519", "BLS12381_G1", "BLS12381_G2"가 있습니다.
pbkdf1
pbkdf1을 기반으로 일반 텍스트 비밀번호를 기반으로 필수 바이너리 키를 생성합니다.
1
2
3
4
5static Buffer crypto.pbkdf1(Buffer password,
Buffer salt,
Integer iterations,
Integer size,
Integer algo) async;
호출 매개변수:
- password:Buffer, 사용할 비밀번호를 지정하세요
- salt:Buffer, hmac에서 사용하는 솔트를 지정합니다.
- iterations: 정수, 반복 횟수 지정
- size: 정수, 키 크기 지정
- algo: 정수, 다음을 지정하십시오.hash알고리즘, 참조hash기준 치수
결과 반환:
- Buffer, 생성된 바이너리 키를 반환합니다.
pbkdf1을 기반으로 일반 텍스트 비밀번호를 기반으로 필수 바이너리 키를 생성합니다.
1
2
3
4
5static Buffer crypto.pbkdf1(Buffer password,
Buffer salt,
Integer iterations,
Integer size,
String algoName) async;
호출 매개변수:
- password:Buffer, 사용할 비밀번호를 지정하세요
- salt:Buffer, hmac에서 사용하는 솔트를 지정합니다.
- iterations: 정수, 반복 횟수 지정
- size: 정수, 키 크기 지정
- algoName: 문자열, 다음을 지정합니다.hash알고리즘, 참조hash기준 치수
결과 반환:
- Buffer, 생성된 바이너리 키를 반환합니다.
pbkdf2
rfc2898에 따라 일반 텍스트 비밀번호를 기반으로 필요한 바이너리 키를 생성합니다.
1
2
3
4
5static Buffer crypto.pbkdf2(Buffer password,
Buffer salt,
Integer iterations,
Integer size,
Integer algo) async;
호출 매개변수:
- password:Buffer, 사용할 비밀번호를 지정하세요
- salt:Buffer, hmac에서 사용하는 솔트를 지정합니다.
- iterations: 정수, 반복 횟수 지정
- size: 정수, 키 크기 지정
- algo: 정수, 다음을 지정하십시오.hash알고리즘, 참조hash기준 치수
결과 반환:
- Buffer, 생성된 바이너리 키를 반환합니다.
rfc2898에 따라 일반 텍스트 비밀번호를 기반으로 필요한 바이너리 키를 생성합니다.
1
2
3
4
5static Buffer crypto.pbkdf2(Buffer password,
Buffer salt,
Integer iterations,
Integer size,
String algoName) async;
호출 매개변수:
- password:Buffer, 사용할 비밀번호를 지정하세요
- salt:Buffer, hmac에서 사용하는 솔트를 지정합니다.
- iterations: 정수, 반복 횟수 지정
- size: 정수, 키 크기 지정
- algoName: 문자열, 다음을 지정합니다.hash알고리즘, 참조hash기준 치수
결과 반환:
- Buffer, 생성된 바이너리 키를 반환합니다.
getHashes
암호화 모듈 지원 받기hash(Abstract) 'md5', 'sha224'와 같은 알고리즘
1static Array crypto.getHashes();
결과 반환:
- Array, 지원되는 fibjs를 반환합니다.hash알고리즘 배열
끊임없는
AES
대칭 암호화 알고리즘 AES 지정, 128, 192, 256비트 키 지원, 블록 암호화 작업 모드는 ECB, CBC, CFB128, CTR, GCM, CCM, XTS 지원
1const crypto.AES = 1;
DES
대칭 암호화 알고리즘 DES를 지정하고 64비트 키를 지원하며 블록 암호 작업 모드는 ECB, CBC를 지원합니다.
1const crypto.DES = 2;
DES_EDE3
대칭 암호화 알고리즘 DES-EDE3 지정, 192비트 키 지원, 블록 암호화 작업 모드는 ECB, CBC 지원
1const crypto.DES_EDE3 = 3;
CAMELLIA
대칭 암호화 알고리즘 CAMELLIA 지정, 128, 192, 256비트 키 지원, 블록 암호화 작업 모드는 ECB, CBC, CFB128, CTR, GCM, CCM 지원
1const crypto.CAMELLIA = 4;
ARIA
대칭 암호화 알고리즘 ARIA 지정, 128, 192, 256비트 키 지원, 블록 암호화 작업 모드는 ECB, CBC, CFB128, CTR, GCM, CCM 지원
1const crypto.ARIA = 5;
CHACHA20
대칭 암호화 알고리즘 CHACHA20을 지정하고 256비트 키를 지원하며 블록 암호 작업 모드는 POLY1305를 지원합니다.
1const crypto.CHACHA20 = 6;
SM4
대칭 암호화 알고리즘 SM4 지정, 블록 암호화 작업 모드는 ECB, CBC 지원
1const crypto.SM4 = 7;
ECB
ECB를 지원하도록 블록 암호 작업 모드를 지정합니다.
1const crypto.ECB = 1;
CBC
CBC를 지원하도록 블록 암호 작업 모드를 지정합니다.
1const crypto.CBC = 2;
CFB64
CFB64를 지원하도록 블록 암호 작업 모드를 지정합니다.
1const crypto.CFB64 = 3;
CFB128
CFB128을 지원하도록 블록 암호 작업 모드를 지정합니다.
1const crypto.CFB128 = 4;
OFB
OFB를 지원하도록 블록 암호 작업 모드를 지정합니다.
1const crypto.OFB = 5;
CTR
CTR을 지원하도록 블록 암호 작업 모드를 지정합니다.
1const crypto.CTR = 6;
GCM
GCM을 지원하도록 블록 암호 작업 모드를 지정합니다.
1const crypto.GCM = 7;
STREAM
스트림 암호화 모드 지정
1const crypto.STREAM = 8;
CCM
CCM을 지원하도록 블록 암호 작업 모드를 지정합니다.
1const crypto.CCM = 9;
XTS
XTS를 지원하도록 블록 암호 작업 모드를 지정합니다.
1const crypto.XTS = 10;
POLY1305
POLY1305를 지원하도록 블록 암호 작업 모드를 지정합니다.
1const crypto.POLY1305 = 11;
PKCS7
패딩 모드를 PKCS7로 지정
1const crypto.PKCS7 = 0;
ONE_AND_ZEROS
채우기 모드를 ONE_AND_ZEROS로 지정
1const crypto.ONE_AND_ZEROS = 1;
ZEROS_AND_LEN
채우기 모드를 ZEROS_AND_LEN으로 지정
1const crypto.ZEROS_AND_LEN = 2;
ZEROS
채우기 모드를 0으로 지정
1const crypto.ZEROS = 3;
NOPADDING
패딩 모드를 NOPADDING으로 지정
1const crypto.NOPADDING = 4;