Apakah node.js memiliki pengkodean base64 bawaan?
Alasan mengapa saya menanyakan hal ini adalah bahwa final()
dari crypto
hanya dapat menampilkan data hex, binary atau ascii. Sebagai contoh:
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');
Menurut dokumen, update()
dapat menampilkan data yang disandikan base64. Namun, final()
tidak mendukung base64. Saya mencoba dan itu akan pecah.
Jika saya melakukan ini:
var ciph = cipher.update(plaintext, 'utf8', 'base64');
ciph += cipher.final('hex');
Lalu apa yang harus saya gunakan untuk dekripsi? Hex atau base64?
Oleh karena itu, saya mencari fungsi untuk meng-encode output hex terenkripsi base64 saya.
cipher.final('base64')
bekerjaJawaban:
Buffer dapat digunakan untuk mengambil string atau sepotong data dan melakukan pengkodean base64 dari hasilnya. Sebagai contoh:
Buffer adalah objek global, jadi tidak perlu diperlukan. Buffer yang dibuat dengan string dapat mengambil parameter enkode opsional untuk menentukan apa enkode string. Enkode yang tersedia
toString
danBuffer
konstruktor adalah sebagai berikut:sumber
const atob = (data) => Buffer.from(data, 'base64').toString('ascii');
.toString("binary")
(atob
singkatan dari ascii (base64) untuk biner, setelah semua)Jawaban yang diterima sebelumnya berisi
new Buffer()
, yang dianggap sebagai masalah keamanan dalam versi node lebih besar dari 6 (meskipun tampaknya untuk usecase ini bahwa input selalu dapat dipaksa ke string).The
Buffer
konstruktor sudah ditinggalkan sesuai dengan dokumentasi .Berikut adalah contoh kerentanan yang dapat dihasilkan dari menggunakannya di pustaka ws.
Cuplikan kode harus berbunyi:
Setelah jawaban ini ditulis, itu telah diperbarui dan sekarang cocok dengan ini.
sumber
new Buffer
) daripadaBuffer.from
.crypto sekarang mendukung base64 ( referensi ):
Jadi Anda bisa melakukannya:
sumber
Buffer dapat digunakan untuk mengambil string atau sepotong data dan melakukan pengkodean base64 dari hasilnya. Sebagai contoh:
Anda dapat menginstal Buffer melalui npm seperti: -
npm i buffer --save
Anda dapat menggunakan ini di
js
file Anda seperti ini: -sumber
Saya menggunakan kode berikut untuk mendekode string base64 di node API nodejs versi 10.7.0
Tolong jangan mencoba untuk menjalankan kode di atas di konsol browser, tidak akan berfungsi. Masukkan kode dalam file sisi server dari nodejs. Saya menggunakan kode baris di atas dalam pengembangan API.
sumber
Saya telah membuat js npm kecil utama pustaka untuk konversi encode / decode base64 di Node.js.
Instalasi
Pemakaian
sumber
Anda dapat melakukan encoding dan decoding base64 dengan javascript sederhana.
Ini diimplementasikan dalam decoder encoder Base64 ini
sumber