logo

@jihyunlab/crypto

@jihyunlab/crypto는 암호화 기능 구현의 편의성을 높이기 위해 개발되었습니다.
@jihyunlab/crypto는 해시와 HMAC, 대칭키 암호화에 대한 기능을 제공하며 실제 암호화와 관련된 기능은 Node.js의 암호화 모듈을 사용합니다.

설치

프로젝트 폴더에서 @jihyunlab/crypto를 설치합니다.

npm i @jihyunlab/crypto

해시

미리 정의된 해시 알고리즘 타입으로 해시를 생성할 수 있습니다.

import { Hash, HASH } from '@jihyunlab/crypto';

const hex = Hash.create(HASH.SHA256).update('string').hex();

버퍼를 사용하여 해시를 생성할 수 있습니다.

const hex = Hash.create(HASH.SHA256).update(Buffer.from('string')).hex();

미리 정의된 함수로 생성될 해시의 타입을 선택할 수 있습니다.

Hash.create(HASH.SHA256).update('string').hex();
Hash.create(HASH.SHA256).update('string').binary();
Hash.create(HASH.SHA256).update('string').base64();
Hash.create(HASH.SHA256).update('string').base64url();
Hash.create(HASH.SHA256).update('string').buffer();
Hash.create(HASH.SHA256).update('string').uint8Array();

사용하려고 하는 알고리즘이 정의되어 있지 않은 경우 직접 알고리즘을 입력할 수 있으며 생성될 해시의 타입도 입력할 수 있습니다.
입력되는 알고리즘과 해시는 Node.js에서 정의된 타입이어야 합니다.

Hash.create('sha256').update('string').digest('base64url');

HMAC

미리 정의된 HMAC 알고리즘 타입으로 HMAC을 생성할 수 있습니다.

import { Hmac, HMAC } from '@jihyunlab/crypto';

const hex = Hmac.create(HMAC.SHA256, 'key').update('string').hex();
const buffer = Hmac.create(HMAC.SHA256, Buffer.from('key')).update(Buffer.from('string')).buffer();

대칭키 암호화

대칭키 암호화는 암호화와 복호화에 동일한 키를 사용하는 암호화 기법입니다.

미리 정의된 암호화 알고리즘 타입과 별도 제공되는 함수들로 암호화 기능을 구현할 수 있습니다.

import { Cipher, Helper, CIPHER, PBKDF, HASH } from '@jihyunlab/crypto';

// Generates a key for the encryption algorithm.
const key = Helper.key.generate(CIPHER.AES_256_CBC, 'password', 'salt');

// Create an IV(Initialization Vector) for encryption.
const iv = Helper.iv.generate(CIPHER.AES_256_CBC);

const encrypted = Cipher.create(CIPHER.AES_256_CBC, key).encrypt.hex('string', iv);
const decrypted = Cipher.create(CIPHER.AES_256_CBC, key).decrypt.hex(encrypted, iv);

버퍼를 사용하여 암호화 기능을 구현할 수 있습니다.

const key = Helper.key.generate(CIPHER.AES_256_CBC, Buffer.from('password'), Buffer.from('salt'));
const iv = Helper.iv.generate(CIPHER.AES_256_CBC);

const encrypted = Cipher.create(CIPHER.AES_256_CBC, key).encrypt.buffer(Buffer.from('string'), iv);
const decrypted = Cipher.create(CIPHER.AES_256_CBC, key).decrypt.buffer(encrypted, iv);

미리 정의된 함수로 생성될 암호화 텍스트의 출력 타입과 복호화 텍스트의 입력 타입을 선택할 수 있습니다.

Cipher.create(CIPHER.AES_256_CBC, key).encrypt.hex('string', iv);
Cipher.create(CIPHER.AES_256_CBC, key).decrypt.hex(encrypted, iv);

Cipher.create(CIPHER.AES_256_CBC, key).encrypt.binary('string', iv);
Cipher.create(CIPHER.AES_256_CBC, key).decrypt.binary(encrypted, iv);

Cipher.create(CIPHER.AES_256_CBC, key).encrypt.base64('string', iv);
Cipher.create(CIPHER.AES_256_CBC, key).decrypt.base64(encrypted, iv);

Cipher.create(CIPHER.AES_256_CBC, key).encrypt.base64url('string', iv);
Cipher.create(CIPHER.AES_256_CBC, key).decrypt.base64url(encrypted, iv);

Cipher.create(CIPHER.AES_256_CBC, key).encrypt.buffer(Buffer.from('string'), iv);
Cipher.create(CIPHER.AES_256_CBC, key).decrypt.buffer(encrypted, iv);

Cipher.create(CIPHER.AES_256_CBC, key).encrypt.uint8Array(Buffer.from('string'), iv);
Cipher.create(CIPHER.AES_256_CBC, key).decrypt.uint8Array(encrypted, iv);

사용하려고 하는 알고리즘이 정의되어 있지 않은 경우 직접 알고리즘을 입력할 수 있으며 암호화와 복호화 텍스트의 입력, 출력 타입을 선택할 수 있습니다.
입력되는 알고리즘과 입력, 출력 텍스트 타입은 Node.js에서 정의된 타입이어야 합니다.

const encrypted = Cipher.create('sm4-cbc', key).encrypt.string('string', iv, 'utf8', 'base64url');
const decrypted = Cipher.create('sm4-cbc', key).decrypt.string(encrypted, iv, 'base64url', 'utf8');

대칭키 암호화(AEAD)

AEAD(Authenticated Encryption with Associated Data) 암호화는 암호화 시 MAC 계산을 통해 무결성을 제공하는 암호화 기법입니다.

미리 정의된 암호화 알고리즘 타입과 별도 제공되는 함수들로 암호화 기능을 구현할 수 있습니다.

import { Aead, Helper, AEAD, PBKDF, HASH } from '@jihyunlab/crypto';

// Generates a key for the encryption algorithm.
const key = Helper.key.generate(AEAD.AES_256_GCM, 'password', 'salt');

// Create an nonce for encryption.
const nonce = Helper.nonce.generate(AEAD.AES_256_GCM);

const encrypted = Aead.create(AEAD.AES_256_GCM, key).encrypt.hex('string', nonce);
const decrypted = Aead.create(AEAD.AES_256_GCM, key).decrypt.hex(encrypted.text, encrypted.tag, nonce);

버퍼를 사용하여 암호화 기능을 구현할 수 있습니다.

const key = Helper.key.generate(AEAD.AES_256_GCM, 'password', 'salt');
const nonce = Helper.nonce.generate(AEAD.AES_256_GCM);

const encrypted = Aead.create(AEAD.AES_256_GCM, key).encrypt.buffer(Buffer.from('string'), nonce);
const decrypted = Aead.create(AEAD.AES_256_GCM, key).decrypt.buffer(encrypted.text, encrypted.tag, nonce);

키나 Nonce, IV를 직접 입력하여 사용할 수 있습니다.
입력될 값을 normalize 함수로 알고리즘에 적합한 크기의 값으로 변환할 수 있습니다.

const key = Helper.key.normalize(AEAD.AES_256_GCM, Buffer.from('key'));
const nonce = Helper.nonce.normalize(AEAD.AES_256_GCM, Buffer.from('nonce'));

라이센스

Open source licensed as MIT.

logo

ⓒ 2023. JihyunLab. All rights reserved.

info@jihyunlab.com