Node.js හි Base64 කේතන ක්‍රමය කරන්නේ කෙසේද?


886

Node.js තුළ තවම පදනම් 64 කේතන ක්‍රමයක් තිබේද?

මම මේ අහන්න හේතුව බව ය final()සිට cryptoහැකි එකම ප්රතිදාන hex, ද්විමය හෝ 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');

විකේතනය සඳහා මා භාවිතා කළ යුත්තේ කුමක්ද? හෙක්ස් හෝ බේස් 64?

එබැවින්, මගේ සංකේතාත්මක හෙක්ස් ප්‍රතිදානය පදනම් 64-කේතනය කිරීමේ ශ්‍රිතයක් මම සොයමි.


8
2016 cipher.final('base64')වැඩ වලදී / පසු මෙම ගැටලුව සොයන අයෙකුට
avck

base122 උත්සාහ github.com/kevinAlbs/Base122
tim

Answers:


2045

නූලක් හෝ දත්ත කැබැල්ලක් ගෙන ප්‍රති .ලය පදනම් 64 කේතනය කිරීම සඳහා බෆර් භාවිතා කළ හැකිය. උදාහරණයක් වශයෙන්:

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

බෆර් යනු ගෝලීය වස්තුවකි, එබැවින් අවශ්‍යතාවයක් අවශ්‍ය නොවේ. නූල් වලින් සාදන ලද බෆරයට නූල් කේතනය කරන්නේ කුමක් දැයි සඳහන් කිරීමට විකල්ප කේතීකරණ පරාමිතියක් ගත හැකිය. පවතින toStringසහ Bufferඉදිකිරීම් කේතන ක්‍රම පහත පරිදි වේ:

'ascii' - බිට් 7 ASCII දත්ත සඳහා පමණි. මෙම කේතීකරණ ක්‍රමය ඉතා වේගවත් වන අතර එය සකසා ඇත්නම් ඉහළ බිටු ඉවත් කරනු ඇත.

'utf8' - බහු බයිට් කේතනය කරන ලද යුනිකෝඩ් අක්ෂර. බොහෝ වෙබ් පිටු සහ වෙනත් ලේඛන ආකෘති UTF-8 භාවිතා කරයි.

'ucs2' - බයිට් 2, කුඩා එන්ඩියන් කේතනය කළ යුනිකෝඩ් අක්ෂර. එයට කේතනය කළ හැක්කේ BMP පමණි (මූලික බහුභාෂා ගුවන්යානය, U + 0000 - U + FFFF).

'base64' - Base64 string encoding.

'ද්විමය' - එක් එක් අක්ෂරවල පළමු බිටු 8 පමණක් භාවිතා කරමින් අමු ද්විමය දත්ත නූල් වලට කේතනය කිරීමේ ක්‍රමයක්. මෙම කේතීකරණ ක්‍රමය අතහැර දමා ඇති අතර හැකි සෑම විටම ස්වාරක්ෂක වස්තු සඳහා එය වළක්වා ගත යුතුය. මෙම කේතීකරණය අනාගත නෝඩ් අනුවාද වල ඉවත් කරනු ලැබේ.


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

එය විය යුත්තේ .toString("binary")( atobascii (base64) ද්විමය සිට, සියල්ලට පසු)
12Me21

@ 12Me21 මම හිතුවේ එය ascii සඳහා base64 ලෙසටද?
ඩේවිඩ් කැලනන්

Av ඩේවිඩ්කලානන් ඇටොබ් () පදනම් 64
12Me21

229

පිළිගත් පිළිතුර මීට පෙර අඩංගු new Buffer() වූ අතර එය 6 ට වඩා වැඩි නෝඩ් අනුවාද වල ආරක්‍ෂිත ගැටළුවක් ලෙස සැලකේ (මෙම භාවිත කේතය සඳහා ආදානය සෑම විටම නූලකට බල කළ හැකි බව පෙනේ).

මෙම Bufferඉදිකිරීමටත් අනුව ප්රතික්ෂේප කරයි ප්රලේඛනය .

Ws පුස්තකාලයේ එය භාවිතා කිරීමෙන් ඇතිවිය හැකි අනාරක්ෂිතභාවයට උදාහරණයක් මෙන්න .

කේත ස්නිපෙට් කියවිය යුත්තේ:

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

මෙම පිළිතුර ලිවීමෙන් පසුව, එය යාවත්කාලීන කර ඇති අතර දැන් මෙය ගැලපේ.


මම ඔබේ පළමු පේළිය භාවිතා කිරීමට උත්සාහ කරන විට, නෝඩ් නැවත පැමිණේ: [TypeError: මෙය ටයිප් කළ අරාවක් නොවේ.]
ඩේව් වොයිල්ස්

7
මෙම දෝෂය සිදුවන්නේ v6 ට වඩා පැරණි නෝඩ් අනුවාද වල ය. මෙම අනුවාද වලදී ඔබට ඉදිකිරීම්කරු ( new Buffer) භාවිතා කිරීමට අවශ්‍ය වේ Buffer.from.
නොට් ජාවානි

V4.5.0 හි Buffer.from () එකතු කරන ලදි.
dskrvk

77
මෙම උදාහරණය සහ පිළිගත් පිළිතුරෙහි ඇති වෙනස දැකීමට උත්සාහ කිරීම මට අහිමි වූ මිනිත්තු කිහිපයක් ඉතිරි කර ගැනීම සඳහා, පිළිගත් පිළිතුර දැන් මෙම පිළිතුරෙන් යෝජනා කරන දෙයට යාවත්කාලීන කර ඇත.
කුනොක්

39

crypto දැන් base64 සඳහා සහය දක්වයි ( යොමුව ):

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
NotJavanese ගේ පිළිතුරට වඩා මෙය භාවිතා කිරීමට හේතුවක් තිබේද?
ට්‍රෙවර්

3
Node සහ Python අතර සංකේතාංකනය ගැලපීමට සිදු වූ අතර මෙම පිළිතුර මට ප්‍රශ්නයක් ඉතිරි කළේය! ස්තූතියි :)
ගිගිසන්

1

නූලක් හෝ දත්ත කැබැල්ලක් ගෙන ප්‍රති .ලය පදනම් 64 කේතනය කිරීම සඳහා බෆර් භාවිතා කළ හැකිය. උදාහරණයක් වශයෙන්:

ඔබ විසින් ස්ථාපනය කළ හැකි ස්වාරක්ෂක වැනි npm හරහා: -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

bufferප්‍රාග්ධනීකරණය කළ යුතුයBuffer
රෙඩ්වුල්ෆ් වැඩසටහන්

1
EdRedwolfPrograms ඔබට පෙනෙන පරිදි මම මෙය ආනයනය කර ඇති බව require('buffer/').Buffer;ඔබට පෙනේ Buffer.
විශාල් තාකූර්

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

කරුණාකර බ්‍රවුසරයේ කොන්සෝලය තුළ ඉහත කේතය ධාවනය කිරීමට උත්සාහ නොකරන්න, ක්‍රියා නොකරනු ඇත. කේතය nodejs හි සේවාදායක පැත්තේ ලිපිගොනු වල දමන්න. මම API සංවර්ධනයේදී ඉහත රේඛා කේතය භාවිතා කරමි.


0

Node.js හි base64 encode / decode පරිවර්තනය සඳහා මම අවසාන කුඩා js npm පුස්තකාලයක් නිර්මාණය කර ඇත්තෙමි .

ස්ථාපනය

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

0

සරල javascript සමඟ ඔබට base64 කේතන හා විකේතනය කළ හැකිය.

    $("input").keyup(function () {
     var value = $(this).val(),
         hash = Base64.encode(value);
     $(".test").html(hash);

     var decode = Base64.decode(hash);

     $(".decode").html(decode);
 });

var Base64={_keyStr:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",encode:function(e){var t="";var n,r,i,s,o,u,a;var f=0;e=Base64._utf8_encode(e);while(f<e.length){n=e.charCodeAt(f++);r=e.charCodeAt(f++);i=e.charCodeAt(f++);s=n>>2;o=(n&3)<<4|r>>4;u=(r&15)<<2|i>>6;a=i&63;if(isNaN(r)){u=a=64}else if(isNaN(i)){a=64}t=t+this._keyStr.charAt(s)+this._keyStr.charAt(o)+this._keyStr.charAt(u)+this._keyStr.charAt(a)}return t},decode:function(e){var t="";var n,r,i;var s,o,u,a;var f=0;e=e.replace(/[^A-Za-z0-9+/=]/g,"");while(f<e.length){s=this._keyStr.indexOf(e.charAt(f++));o=this._keyStr.indexOf(e.charAt(f++));u=this._keyStr.indexOf(e.charAt(f++));a=this._keyStr.indexOf(e.charAt(f++));n=s<<2|o>>4;r=(o&15)<<4|u>>2;i=(u&3)<<6|a;t=t+String.fromCharCode(n);if(u!=64){t=t+String.fromCharCode(r)}if(a!=64){t=t+String.fromCharCode(i)}}t=Base64._utf8_decode(t);return t},_utf8_encode:function(e){e=e.replace(/rn/g,"n");var t="";for(var n=0;n<e.length;n++){var r=e.charCodeAt(n);if(r<128){t+=String.fromCharCode(r)}else if(r>127&&r<2048){t+=String.fromCharCode(r>>6|192);t+=String.fromCharCode(r&63|128)}else{t+=String.fromCharCode(r>>12|224);t+=String.fromCharCode(r>>6&63|128);t+=String.fromCharCode(r&63|128)}}return t},_utf8_decode:function(e){var t="";var n=0;var r=c1=c2=0;while(n<e.length){r=e.charCodeAt(n);if(r<128){t+=String.fromCharCode(r);n++}else if(r>191&&r<224){c2=e.charCodeAt(n+1);t+=String.fromCharCode((r&31)<<6|c2&63);n+=2}else{c2=e.charCodeAt(n+1);c3=e.charCodeAt(n+2);t+=String.fromCharCode((r&15)<<12|(c2&63)<<6|c3&63);n+=3}}return t}}

// Define the string
var string = 'Hello World!';

// Encode the String
var encodedString = Base64.encode(string);
console.log(encodedString); // Outputs: "SGVsbG8gV29ybGQh"

// Decode the String
var decodedString = Base64.decode(encodedString);
console.log(decodedString); // Outputs: "Hello World!"</script></div>

මෙම Base64 එන්කෝඩර් විකේතකය තුළ මෙය ක්‍රියාත්මක වේ

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.