web-dev-qa-db-ja.com

TypeScriptでのRSA暗号化/復号化

Angular 4を使用してアプリケーションのフロントエンドを作成しています。バックエンド(JavaのSpringで開発)にOAuth2を実装しているため、アプリケーションを使用するユーザーを認証する必要があります。

重要なのは、バックエンドサーバーログからパスワードを明確に確認でき、SSLを追加するまでMITMによってパスワードが検出される可能性があるということです。

そのため、送信されたパスワードをRSAで暗号化することにしました。私のバックエンドはすでに準備ができていますが、RSAキーペアから暗号化/復号化するための適切なAPIを提供する最新のライブラリが見つかりません。

cryptoモジュールも表示されますが、ECMAS6では使用できなくなりました。 crypto-js1つはAESとMD5/SHAなどの一部のハッシュのみを提供します。

4
Romeortec

いくつかをインストールした後、最終的に方法を見つけました。

npm install buffer
npm install crypto-browserify

その後、それを使用します

import {config} from "../app.config";
import {Buffer} from 'buffer/';
import * as crypto from "crypto-browserify";

export class RsaService {
  private privateKey: string;
  private publicKey: string;
  private enabled: boolean;

  constructor() {
    this.privateKey = config.authentication.rsa.privateKey;
    this.publicKey = config.authentication.rsa.publicKey;
    this.enabled = config.authentication.rsa.enabled;
  }

  isEnabled(): boolean {
    return this.enabled;
  }

  encrypt(plaintext: string): string {
    if (!this.enabled)
      return plaintext;

    let buffer = new Buffer(plaintext);
    let encrypted = crypto.privateEncrypt(this.privateKey, buffer);

    return encrypted.toString('base64');
  }

  decrypt(cypher: string): string {
    if (!this.enabled)
      return cypher;

    let buffer = Buffer.from(cypher, 'base64');
    let plaintext = crypto.publicDecrypt(this.publicKey, buffer);

    return plaintext.toString('utf8')
  }
}
2
Romeortec