본문 바로가기

개발/react 생태계

[React] RSA in react.js and node.js

반응형

비밀번호를 전송할때 https가 최소 요건이지만 그래도 암호화해서 보내는게 좋습니다. *text그대로 보내는 서비스들은 따로 보안처리를 했습니다

그중 public으로 암호화해 private으로 해독하는 RSA방식이 있습니다. 기 개발된 library로 encrypt-rsa, jsencrypt등등이 있는데요. 어떤 것은 node.js에서만, 어떤 것은 react.js에서만 사용가능합니다. 이에 react.js <-> node.js 간 통신이 가능한 형태를 구현해보겠습니다

 

1)React

import { JSEncrypt } from "jsencrypt";

const encrypt = new JSEncrypt();
const public_key = `
-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDlOJu6TyygqxfWT7eLtGDwajtN
FOb9I5XRb6khyfD1Yt3YiCgQWMNW649887VGJiGr/L5i2osbl8C9+WJTeucF+S76
xFxdU6jE0NQ+Z+zEdhUTooNRaY5nZiu5PgDB0ED/ZKBUSLKL7eibMxZtMlUDHjm4
gwQco1KRMDSmXSMkDwIDAQAB
-----END PUBLIC KEY-----`;

encrypt.setPublicKey(public_key);
// 1234는 암호화할 텍스트입니다
const encrypted = encrypt.encrypt('1234');

 

2)Node

function decryptMessage(encryptedMessage: string, privateKey: string) {
  const rsaPrivateKey = {
    key: privateKey,
    passphrase: '',
    padding: crypto.constants.RSA_PKCS1_PADDING,
  };

  const decryptedMessage = crypto.privateDecrypt(
    rsaPrivateKey,
    Buffer.from(encryptedMessage, 'base64'),
  );

  return decryptedMessage.toString('utf8');
}

이상입니다