কিভাবে নোড.জেজে বেস 64 এনকোডিং করবেন?


839

নোড.জেএসগুলিতে এখনও বেস 64 ইনকোডিং রয়েছে?

কারণ আমি এই জিজ্ঞাসা যে final()থেকে cryptoশুধুমাত্র আউটপুট হেক্স, বাইনারি বা 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()বেস 64-এনকোডড ডেটা আউটপুট করতে পারে। যাইহোক, final()বেস 64 সমর্থন করে না। আমি চেষ্টা করেছি এবং এটি ভেঙে যাবে।

আমি যদি এটি করি:

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

তাহলে ডিক্রিপশনটির জন্য আমার কী ব্যবহার করা উচিত? হেক্স না বেস 64?

অতএব, আমি আমার এনক্রিপ্ট করা হেক্স আউটপুট বেস 64-এনকোড করার জন্য একটি ফাংশন সন্ধান করছি।


8
কেউ 2016 পর / এই সমস্যা খুঁজছেন জন্য cipher.final('base64')কাজ
avck

base122 চেষ্টা github.com/kevinAlbs/Base122
টিম

উত্তর:


1963

বাফারগুলি স্ট্রিং বা ডেটা টুকরা নিতে এবং ফলাফলের বেস 64 এনকোডিংয়ের জন্য ব্যবহার করা যেতে পারে। উদাহরণ স্বরূপ:

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

বাফারগুলি একটি বিশ্বব্যাপী অবজেক্ট, সুতরাং কোনও প্রয়োজনের প্রয়োজন নেই। স্ট্রিং দিয়ে তৈরি বাফারগুলি স্ট্রিংটি কী এনকোডিং করছে তা নির্দিষ্ট করতে একটি alচ্ছিক এনকোডিং প্যারামিটার নিতে পারে available উপলভ্য toStringএবং Bufferনির্মাণকারী এনকোডিংগুলি নিম্নরূপ:

'ascii' - শুধুমাত্র 7 বিট ASCII ডেটার জন্য। এই এনকোডিং পদ্ধতিটি খুব দ্রুত এবং যদি সেট করা থাকে তবে এটি উচ্চ বিটটি সরিয়ে ফেলবে।

'utf8' - মাল্টি বাইট এনকোড ইউনিকোড অক্ষর। অনেক ওয়েব পৃষ্ঠাগুলি এবং অন্যান্য নথি ফর্ম্যাটগুলি ইউটিএফ -8 ব্যবহার করে।

'ucs2' - 2-বাইট, সামান্য এন্ডিয়ান এনকোডেড ইউনিকোড অক্ষর। এটি কেবল বিএমপি (বেসিক বহুভাষিক প্লেন, ইউ +0000 - ইউ + এফএফএফএফ) এনকোড করতে পারে।

'বেস64' - বেস 64 স্ট্রিং এনকোডিং।

'বাইনারি' - প্রতিটি অক্ষরের শুধুমাত্র প্রথম 8 টি বিট ব্যবহার করে স্ট্রিংয়ে কাঁচা বাইনারি ডেটা এনকোড করার একটি উপায়। এই এনকোডিং পদ্ধতিটি অবচয় করা হয়েছে এবং যেখানে সম্ভব সেখানে বাফার অবজেক্টের পক্ষে এড়ানো উচিত। নোডের ভবিষ্যতের সংস্করণগুলিতে এই এনকোডিংটি সরানো হবে।


2
const atob = (data) => Buffer.from(data, 'base64').toString('ascii');
spencer.sm

যে হওয়া উচিত .toString("binary")( atobবাইনারিতে ASCII (করুন Base64-) ঘোরা, সব পরে)
12Me21

@ 12Me21 আমি ভেবেছিলাম এটি আসকি বেস বেস 64 এর পক্ষে?
ডেভিড কলানান

@ ডেভিডক্যালানান অ্যাটোব () বেস 64
12

@ 12Me21 ঠিক আছে স্পষ্ট করার জন্য ধন্যবাদ
ডেভিড কলানান

221

পূর্বে থাকা স্বীকৃত উত্তরটি new Buffer()which টিরও বেশি নোড সংস্করণগুলিতে সুরক্ষা সমস্যা হিসাবে বিবেচিত হয় (যদিও এই ব্যবহারের ক্ষেত্রে সম্ভবত মনে হয় যে ইনপুটটি সর্বদা স্ট্রিংয়ের সাথে জোর করা যায়)।

Bufferকন্সট্রাকটর অনুযায়ী অননুমোদিত ডকুমেন্টেশন

এখানে দুর্বলতার একটি উদাহরণ যা ডাব্লুএস লাইব্রেরিতে এটি ব্যবহার করে ফলাফল হতে পারে।

কোড স্নিপেটগুলি পড়তে হবে:

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

এই উত্তরটি লেখার পরে এটি আপডেট করা হয়েছে এবং এখন এটির সাথে এটি মিলছে।


আমি যখন আপনার প্রথম লাইনটি ব্যবহার করার চেষ্টা করি, নোড ফিরে আসে: [টাইপআরার: এটি কোনও টাইপ করা অ্যারে নয়]]
ডেভ ভয়েসস

7
V6 এর চেয়ে পুরানো নোড সংস্করণগুলিতে এই ত্রুটি ঘটে। এই সংস্করণগুলিতে আপনার new Bufferপরিবর্তে কনস্ট্রাক্টর ( ) ব্যবহার করতে হবে Buffer.from
জাজানিজ

বাফার.ফ্রোম () v4.5.0 এ যুক্ত হয়েছিল।
dskrvk

71
কেবলমাত্র আপনাকে কয়েক মিনিট বাঁচাতে যে আমি এই উদাহরণটি এবং গ্রহণযোগ্য উত্তরের মধ্যে একটির মধ্যে পার্থক্য দেখার চেষ্টা হারিয়েছি, গৃহীত উত্তরটি এখন এই উত্তরটির পরামর্শ অনুসারে আপডেট হয়েছে।
কুনোক

39

ক্রিপ্টো এখন বেস 64 ( রেফারেন্স ) সমর্থন করে :

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');

3
নোট জাভানিজের উত্তরে এটি ব্যবহারের কোনও কারণ?
ট্রেভর

3
নোড এবং পাইথনের মধ্যে এনক্রিপশন মিলাতে হয়েছিল এবং এই উত্তরটি আমাকে একটি প্রশ্ন বাঁচায়! ধন্যবাদ :)
গিগিজান

1

বাফারগুলি স্ট্রিং বা ডেটা টুকরা নিতে এবং ফলাফলের বেস 64 এনকোডিংয়ের জন্য ব্যবহার করা যেতে পারে। উদাহরণ স্বরূপ:

আপনি এনপিএম এর মাধ্যমে বাফার ইনস্টল করতে পারেন: -npm i buffer --save

আপনি এটি আপনার jsফাইলে এটি ব্যবহার করতে পারেন : -

var buffer = require('buffer/').Buffer;

->> console.log(buffer.from("Hello Vishal Thakur").toString('base64'));
SGVsbG8gVmlzaGFsIFRoYWt1cg==  // Result

->> console.log(buffer.from("SGVsbG8gVmlzaGFsIFRoYWt1cg==", 'base64').toString('ascii'))
Hello Vishal Thakur   // Result

0

নোড এপিআই নোডেজ সংস্করণ 10.7.0 এ বেস 64 স্ট্রিংটি ডিকোড করতে আমি নিম্নলিখিত কোডটি ব্যবহার করছি

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 + '"'); 

ব্রাউজারের কনসোলে কোডটি উপরে চালানোর চেষ্টা করবেন না, কাজ করবে না। নোডেজগুলির সার্ভার সাইড ফাইলগুলিতে কোডটি রাখুন। আমি এপিআই বিকাশে উপরের লাইন কোডটি ব্যবহার করছি।


0

আমি নোড.জেজে বেস 64 এনকোড / ডিকোড রূপান্তরকরণের জন্য একটি চূড়ান্ত ছোট জেএস এনপিএম লাইব্রেরি তৈরি করেছি ।

স্থাপন

npm install nodejs-base64-converter --save

ব্যবহার

var nodeBase64 = require('nodejs-base64-converter');

console.log(nodeBase64.encode("test text")); //dGVzdCB0ZXh0
console.log(nodeBase64.decode("dGVzdCB0ZXh0")); //test text
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.