Node.jsにはまだbase64エンコーディングが組み込まれていますか?
私がこれを要求するのは、crypto
からのfinal()
は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
バッファはグローバルオブジェクトなので、必須ではありません。文字列で作成されたバッファは、文字列がどのエンコーディングであるかを指定するためにオプションのencodingパラメータを取ることができます。利用可能なtoString
およびBuffer
コンストラクタエンコーディングは次のとおりです。
'ascii' - 7ビットASCIIデータ専用。このエンコード方式は非常に高速で、設定されていると上位ビットを取り除きます。
'utf8' - マルチバイトエンコードのUnicode文字。多くのWebページおよび他の文書フォーマットはUTF-8を使用しています。
'ucs2' - 2バイト、リトルエンディアンでエンコードされたUnicode文字。 BMP(基本多言語面、U + 0000 - U + FFFF)のみをエンコードできます。
'base64' - Base64文字列エンコーディング。
'binary' - 各文字の最初の8ビットのみを使用して、生のバイナリデータを文字列にエンコードする方法。この符号化方法は推奨されていないので、可能であればBufferオブジェクトを優先して避けるべきです。このエンコーディングは将来のNodeのバージョンで削除される予定です。
承認された回答には、6よりも大きいノードバージョンでセキュリティ上の問題と見なされるものが含まれています(ただし、このユースケースでは入力を常に文字列に強制変換できる可能性があります)。
Buffer
コンストラクタは ドキュメンテーション に従って非推奨です。
こちら は、wsライブラリでそれを使用した結果として起こりうる脆弱性の一例です。
コードスニペットは次のようになります。
console.log(Buffer.from("Hello World").toString('base64'));
console.log(Buffer.from("SGVsbG8gV29ybGQ=", 'base64').toString('ascii'));
cryptoはbase64( reference )をサポートするようになりました。
cipher.final('base64')
だからあなたは単にすることができます:
var cipher = crypto.createCipheriv('des-ede3-cbc', encryption_key, iv);
var ciph = cipher.update(plaintext, 'utf8', 'base64');
ciph += cipher.final('base64');
var decipher = crypto.createDecipheriv('des-ede3-cbc', encryption_key, iv);
var txt = decipher.update(ciph, 'base64', 'utf8');
txt += decipher.final('utf8');
ノードAPI nodejsバージョン10.7.0でbase64文字列をデコードするために次のコードを使用しています
let data = 'c3RhY2thYnVzZS5jb20='; // Base64 string
let buff = new Buffer(data, 'base64'); //Buffer
let text = buff.toString('ascii'); //this is the data type that you want your Base64 data to convert to
console.log('"' + data + '" converted from Base64 to ASCII is "' + text + '"');
ブラウザーのコンソールで上記のコードを実行しようとしないでください、動作しません。 nodejsのサーバー側ファイルにコードを配置します。 API開発で上記の行コードを使用しています。