1. ホーム
  2. node.js

[解決済み】Node.jsでBase64エンコードを行うにはどうすればよいですか?

2022-03-23 19:23:44

質問

Node.jsにBase64エンコーディングはまだ組み込まれていないのですか?

なぜこのようなことを聞くかというと final() から crypto は、16進数、2進数、ASCIIのいずれかのデータしか出力できません。例えば

var cipher = crypto.createCipheriv('des-ede3-cbc', encryption_key, iv);
var ciph = cipher.update(plaintext, 'utf8', 'hex');
ciph += cipher.final('hex');

var decipher = crypto.createDecipheriv('des-ede3-cbc', encryption_key, iv);
var txt = decipher.update(ciph, 'hex', 'utf8');
txt += decipher.final('utf8');

ドキュメントによると update() はBase64でエンコードされたデータを出力することができます。しかし final() はBase64をサポートしていません。試してみましたが、壊れます。

こうすれば

var ciph = cipher.update(plaintext, 'utf8', 'base64');
    ciph += cipher.final('hex');

では、復号化には何を使えばいいのでしょうか?16進数かBase64か?

そこで、暗号化された16進数出力をBase64エンコードする関数を探しています。

どのように解決するのですか?

バッファ は、文字列やデータの一部を受け取り、その結果をBase64エンコードするために使用することができます。例えば

> console.log(Buffer.from("Hello World").toString('base64'));
SGVsbG8gV29ybGQ=
> console.log(Buffer.from("SGVsbG8gV29ybGQ=", 'base64').toString('ascii'))
Hello World

バッファはグローバルなオブジェクトなので、requireは必要ありません。文字列で作成されたバッファは、オプションのエンコーディングパラメータで、文字列のエンコーディングを指定することができます。利用可能な toStringBuffer コンストラクタのエンコーディングは以下の通りです。

'ascii' - 7ビットのASCIIデータのみ。このエンコード方法は、非常に は高速で、ハイビットが設定されている場合はストリップされます。

utf8' - マルチバイトエンコーディングされた ユニコード文字。多くのウェブページやその他の文書フォーマットでは UTF-8。

ucs2' - 2 バイト、リトルエンディアンでエンコードされた Unicode 文字です。これは はBMP(Basic Multilingual Plane、U+0000〜U+FFFF)だけをエンコードすることができます。

'base64' - Base64文字列エンコーディング。

バイナリ」- 生の バイナリデータの最初の8ビットのみを使用して文字列に変換します。 文字です。このエンコーディング方式は非推奨です。 可能であれば、Buffer オブジェクトを使用することをお勧めします。このエンコーディングは削除される予定です。 の将来のバージョンでは