
javascript에서 쉽게 암호화를 구현하기 위해 node-forge라는 npm package가 있다.
물론 base64, encode 등등 이용해서 할 수 있겠지만 누구나 디코딩이 가능해 암호화라고 할 수는 없겠다.. 직접 개인키 공개키를 이용해서 하기는 어렵기 때문에 node-forge를 이용해서 간편하게 구현? 할 수 있다.
https://www.npmjs.com/package/node-forge
Forge는 자바스크립트에서 TLS 프로토콜(암호화 도구)을 구현한 패키지 입니다.
컴퓨터 네트워크를 통해 통신 보안을 제공하도록 설계된 암호화 프로토콜 입니다.
둘 이상의 통신 컴퓨터 응용 프로그램 간 인증서 사용과 같은 암호화를 사용하여 기밀성, 무결성, 신뢰성을 포함한 보안을 제공하는 것을 목표로 한다.
byte buffer, base64, 16진수 bytes 변환 같은 유틸리티를 제공합니다.
const forge = require('node-forge')
let text = "hello world"
// base 64 인코딩 디코딩
let encoded = forge.util.encode64(text);
let decoded = forge.util.decode64(encoded); // hello world
// UTF-8 인코딩 디코딩
let encodedutf = forge.util.encodeUtf8(text);
let decoedutf = forge.util.decodeUtf8(encodedUtf); // hello world
let temp = "0xff"
let bytes = forge.util.hexToBytes(temp);
let hex = forge.util.bytesToHex(bytes);
// sha1, sha256, sha384 문구만 바꾸어 주면 된다.
let text = forge.md.sha1.create();
text.update('this is example text');
console.log(text.digest().toHex());
const rsa = forge.pki.rsa;
let public_key;
let private_key;
rsa.generateKeyPair({bits: 2048, workers: 2}, (err, keypair) => {
// keypair.privateKey, keypair.publicKey
public_key = keypair.publicKey
private_key = keypair.privateKey;
})
generateKeyPair를 이용해 개인키 공개키를 발급받는다. 여기서 개인키는 중요 정보 이므로 함부로 로컬에 저장하면 안되니 주의해야 한다.
혹은 외부에서 공개키를 가져오려면 forge.pki.publicKeyFromPem 을 사용해 개인적으로 가져온 pem을 이용해 키를 발급 받으면 된다.
후 발급받은 공개키로 암호화 하고 싶은 text를 encrypt 메소드를 이용할 수 있다.
let text = "i want to encrypt text"
const encrypted_text = public_key.encrypt(text, "RSA-OAEP")
// 복호화
const decrypted_text = private_key.decrypt(encrypted_text)