Forge PKCS#8 - 개인키의 포맷변환 및 암호화 저장

https://github.com/digitalbazaar/forge 참조
forge.min.0.6.12.js 링크하여 활용
Forge는 TLS 프로토콜을 자바스크립트로 구현한 것으로서 클라이언트측 암호프로그래밍과 node.js 기반의 서버측 암호프로그래밍에 활용할 수 있습니다.

키생성 
var rsa = forge.pki.rsa;
var keypair = rsa.generateKeyPair(1024);
var publicKey = keypair.publicKey;
var privateKey = keypair.privateKey;

포맷변환 (privateKey - PEM)
var pem = pki.privateKeyToPem(privateKey);
var privateKey = pki.privateKeyFromPem(pem);

포맷변환 (privateKey - ASN.1)
var rsaPrivateKey = pki.privateKeyToAsn1(privateKey);
var privateKey = pki.privateKeyFromAsn1(rsaPrivateKey);

포맷변환 (RSAPrivateKey ASN.1 object - PKCS#8 ASN.1 PrivateKeyInfo)
var privateKeyInfo = pki.wrapRsaPrivateKey(rsaPrivateKey);

포맷변환 (PKCS#8 ASN.1 PrivateKeyInfo - PEM)
var pem1 = pki.privateKeyInfoToPem(privateKeyInfo);

개인키정보의 암호화 저장 (PrivateKeyInfo를 aes256으로 암호화)
var encryptedPrivateKeyInfo = pki.encryptPrivateKeyInfo(
  privateKeyInfo, 'password', {
    algorithm: 'aes256', // 'aes128', 'aes192', 'aes256', '3des'
  });

개인키정보를 복호화 
var privateKeyInfo1 = pki.decryptPrivateKeyInfo(
  encryptedPrivateKeyInfo, 'password');

암호화된 개인키정보를 PEM으로 변환/복구  
var pem2 = pki.encryptedPrivateKeyToPem(encryptedPrivateKeyInfo);
var encryptedPrivateKeyInfo1 = pki.encryptedPrivateKeyFromPem(pem2);

개인키를 암호화하여 PEM 포맷으로 출력/복구 
var pem3 = pki.encryptRsaPrivateKey(privateKey, 'password');
var privateKey = pki.decryptRsaPrivateKey(pem3, 'password');

개인키로부터 공개키 추출 
var publicKey = pki.setRsaPublicKey(privateKey.n, privateKey.e);