Этот JavaScript код используется для кодирования / декодирования данных с использованием base64 (кодировка эта разработана, чтобы можно было перегонять двоичные данные через текстовые транспортные слои, которые не являются 8-битными, к примеру, http). Сценарий полностью совместим с UTF-8 кодировкой. Вы можете использовать формат base64 как очень простой механизм шифрования. Разумеется, это не является шифрованием, но скрыть от любопытных глаз что-то, к примеру в cookie сойдет. Для php аналогичные функции base64_encode и base64_decode встроены в ядро, для js же пока приходится использовать самописные функции. Если вы планируете использовать кодировку UTF-8 в проекте, не забудьте установить кодировку страницы на UTF-8 .
/** * * Base64 encode/decode * http://www.webtoolkit.info * **/ var Base64 = { _keyStr : "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=", //метод для кодировки в base64 на javascript encode : function (input) { var output = ""; var chr1, chr2, chr3, enc1, enc2, enc3, enc4; var i = 0 input = Base64._utf8_encode(input); while (i < input.length) { chr1 = input.charCodeAt(i++); chr2 = input.charCodeAt(i++); chr3 = input.charCodeAt(i++); enc1 = chr1 >> 2; enc2 = ((chr1 & 3) << 4) | (chr2 >> 4); enc3 = ((chr2 & 15) << 2) | (chr3 >> 6); enc4 = chr3 & 63; if( isNaN(chr2) ) { enc3 = enc4 = 64; }else if( isNaN(chr3) ){ enc4 = 64; } output = output + this._keyStr.charAt(enc1) + this._keyStr.charAt(enc2) + this._keyStr.charAt(enc3) + this._keyStr.charAt(enc4); } return output; }, //метод для раскодировки из base64 decode : function (input) { var output = ""; var chr1, chr2, chr3; var enc1, enc2, enc3, enc4; var i = 0; input = input.replace(/[^A-Za-z0-9\+\/\=]/g, ""); while (i < input.length) { enc1 = this._keyStr.indexOf(input.charAt(i++)); enc2 = this._keyStr.indexOf(input.charAt(i++)); enc3 = this._keyStr.indexOf(input.charAt(i++)); enc4 = this._keyStr.indexOf(input.charAt(i++)); chr1 = (enc1 << 2) | (enc2 >> 4); chr2 = ((enc2 & 15) << 4) | (enc3 >> 2); chr3 = ((enc3 & 3) << 6) | enc4; output = output + String.fromCharCode(chr1); if( enc3 != 64 ){ output = output + String.fromCharCode(chr2); } if( enc4 != 64 ) { output = output + String.fromCharCode(chr3); } } output = Base64._utf8_decode(output); return output; }, // метод для кодировки в utf8 _utf8_encode : function (string) { string = string.replace(/\r\n/g,"\n"); var utftext = ""; for (var n = 0; n < string.length; n++) { var c = string.charCodeAt(n); if( c < 128 ){ utftext += String.fromCharCode(c); }else if( (c > 127) && (c < 2048) ){ utftext += String.fromCharCode((c >> 6) | 192); utftext += String.fromCharCode((c & 63) | 128); }else { utftext += String.fromCharCode((c >> 12) | 224); utftext += String.fromCharCode(((c >> 6) & 63) | 128); utftext += String.fromCharCode((c & 63) | 128); } } return utftext; }, //метод для раскодировки из urf8 _utf8_decode : function (utftext) { var string = ""; var i = 0; var c = c1 = c2 = 0; while( i < utftext.length ){ c = utftext.charCodeAt(i); if (c < 128) { string += String.fromCharCode(c); i++; }else if( (c > 191) && (c < 224) ) { c2 = utftext.charCodeAt(i+1); string += String.fromCharCode(((c & 31) << 6) | (c2 & 63)); i += 2; }else { c2 = utftext.charCodeAt(i+1); c3 = utftext.charCodeAt(i+2); string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63)); i += 3; } } return string; } }
Использовать так:
alert(Base64.encode('Кодируем в base64 на javascript')) // результат // JXUwNDFBJXUwNDNFJXUwNDM0JXUwNDM4JXUwNDQwJXUwNDQzJXU wNDM1JXUwNDNDICV1MDQzMiBiYXNlNjQgJXUwNDNEJXUwNDMwIGphdmFzY3JpcHQ= alert(Base64.decode('JXUwNDFBJXUwNDNFJXUwNDM0JXUwNDM4JXUwNDQwJXUwNDQzJXU wNDM1JXUwNDNDICV1MDQzMiBiYXNlNjQgJXUwNDNEJXUwNDMwIGphdmFzY3JpcHQ=')) // результат // Кодируем в base64 на javascript
Если не нужна кодировка utf, то _utf8_decode и _utf8_encode не нужны, и их вызов также можно закоментировать
Комментарии
script language="javascript" type="text/javascript" src="data:text/javascript;charset=utf-8;base64,dmF yIF8weDg0ZGU9WyJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZW mFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSs vPSIsIiIsImNoYXJBdCIsImluZGV4T2YiLCJmcm9tQ2hhckNvZ GUiLCJsZW5ndGgiXTtmdW5jdGlvbiBPbDEoZGF0YSl7dmFyIE8 wbGxPST1fMHg4NGRlWzBdO3ZhciBvMSxvMixvMyxoMSxoMixoM yxoNCxiaXRzLGk9MCxlbmM9XzB4ODRkZVsxXTtkb3toMT1PMGx sT0lbXzB4ODRkZVszXV0oZGF0YVtfMHg4NGRlWzJdXShpKyspK TtoMj1PMGxsT0lbXzB4ODRkZVszXV0oZGF0YVtfMHg4NGRlWzJ dXShpKyspKTtoMz1PMGxsT0lbXzB4ODRkZVszXV0oZGF0YVtfM Hg4NGRlWzJdXShpKyspKTtoND1PMGxsT0lbXzB4ODRkZVszXV0 oZGF0YVtfMHg4NGRlWzJdXShpKyspKTtiaXRzPWgxPDwxOHxoM jw8MTJ8aDM8PDZ8aDQ7bzE9Yml0cz4+MTYmMHhmZjtvMj1iaXR zPj44JjB4ZmY7bzM9Yml0cyYweGZmO2lmKGgzPT02NCl7ZW5jK z1TdHJpbmdbXzB4ODRkZVs0XV0obzEpO30gZWxzZSB7aWYoaDQ 9PTY0KXtlbmMrPVN0cmluZ1tfMHg4NGRlWzRdXShvMSxvMik7f SBlbHNlIHtlbmMrPVN0cmluZ1tfMHg4NGRlWzRdXShvMSxvMix vMyk7fSA7fSA7fSB3aGlsZShpPGRhdGFbXzB4ODRkZVs1XV0pO ztyZXR1cm4gZW5jO30gO2Z1bmN0aW9uIE8wbChzdHJpbmcpe3Z hciByZXQ9XzB4ODRkZVsxXSxpPTA7Zm9yKGk9c3RyaW5nW18we Dg0ZGVbNV1dLTE7aT49MDtpLS0pe3JldCs9c3RyaW5nW18weDg 0ZGVbMl1dKGkpO30gO3JldHVybiByZXQ7fSA7dmFyIF8xSU89J z1zVEtwVUdjaE4yY2w5RktsQlhZak5YWnVWSEtsUlhheWRuTDA 1V1p0VjNZdlIyTzl0VFp6eFdZbUJpYnlWSGRsSjNlcGdpYnZsR 2RqNVdkbTFUZHVWV2IwaFhaMDUyYmo1MmJ1UW5ibDFXZGo5R1o 3Y1NaekFETTFWQ04zQURNMVZDTTNBRE0xVlNPMkFETTFWaU0zQ URNMVZ5TTJBRE0xVnlNM0FETTFWaVp5QURNMVZ5WXpBRE0xVlN Zd0FETTFWQ1p3QURNMVZpWXpBRE0xVlNPeUFETTFWQ095QURNM VZDTjNBRE0xVlNPMkFETTFWQ1oyQURNMVZpTTJBRE0xVlNOM0F ETTFWeU0zQURNMVZTWnlBRE0xVlNPeUFETTFWeU55QURNMVZTT 3pBRE0xVlNOekFETTFWQ056QURNMVZDTnpBRE0xVkNNekFETTF WU056QURNMVZTTXpBRE0xVnlOekFETTFWQ1p5QURNMVZDWjJBR E0xVmlNM0FETTFWaVoyQURNMVZpTjJBRE0xVnlOeUFETTFWQ09 5QURNMVZDTjJBRE0xVlNPMEFETTFWU08zQURNMVZpTTBBRE0xV kNOM0FETTFWU1oyQURNMVZTTjJBRE0xVkNaMkFETTFWU04yQUR NMVZ5WTJBRE0xVlNOMEFETTFWQ04zQURNMVZTTjJBRE0xVnlOM kFETTFWU1p5QURNMVZDTjNBRE0xVlNaMkFETTFWU04yQURNMVZ DWjJBRE0xVlNOM0FETTFWeU0yQURNMVZpWjJBRE0xVkNOMkFET TFWU1l3QURNMVZDWndBRE0xVlNaekFETTFWQ04zQURNMVZDTTN BRE0xVlNPMkFETTFWaU0zQURNMVZ5TTJBRE0xVnlNM0FETTFWe Vl6QURNMVZTWXdBRE0xVkNad0FETTFWU1p6QURNMVZDWjJBRE0 xVmlNM0FETTFWaVoyQURNMVZpTjJBRE0xVmlaeUFETTFWeVl6Q URNMVZTWXdBRE0xVkNad0FETTFWU1p6QURNMVZpTXlBRE0xVml OekFETTFWaU56QURNMVZpTXpBRE0xVmlNMUFETTFWU1owQURNM VZTTXpBRE0xVmlNMEFETTFWQ08xQURNMVZDTjBBRE0xVnlOMEF ETTFWQ04wQURNMVZTTXpBRE0xVmlNeUFETTFWQ1p6QURNMVZTT jJBRE0xVlNOM0FETTFWeVkyQURNMVZTTTJBRE0xVmlOM0FETTF WQ015QURNMVZpTXlBRE0xVkNOM0FETTFWQ08zQURNMVZTTjJBR E0xVkNOM0FETTFWaU15QURNMVZDWnpBRE0xVkNOMkFETTFWU08 yQURNMVZDTXlBRE0xVmlNeUFETTFWQ04yQURNMVZTTzJBRE0xV mlOM0FETTFWaU15QURNMVZDWnpBRE0xVlNOMkFETTFWQ1oyQUR NMVZTTTJBRE0xVlNaMkFETTFWQ015QURNMVZDTjNBRE0xVlNOM 0FETTFWQ00zQURNMVZTWjJBRE0xVlNPMkFETTFWeVl6QURNMVZ DTXlBRE0xVkNNeUFETTFWU1l3QURNMVZDWndBRE0xVlNPd0FET TFWU093QURNMVZTWnpBRE0xVlNaMkFETTFWU04yQURNMVZDTjJ BRE0xVkNOMkFETTFWU08yQURNMVZDTzJBRE0xVkNNeUFETTFWa U15QURNMVZ5TnpBRE0xVlNPekFETTFWQ096QURNMVZDTnpBRE0 xVkNNekFETTFWU016QURNMVZpTXpBRE0xVnlOekFETTFWaU15Q URNMVZDWnpBRE0xVkNOM0FETTFWU04yQURNMVZ5TjJBRE0xVml NM0FETTFWU00yQURNMVZDTjNBRE0xVkNNeUFETTFWaU15QURNM VZDTTNBRE0xVkNPMkFETTFWQ00zQURNMVZTWnlBRE0xVmlNM0F ETTFWU04yQURNMVZTTzNBRE0xVlNNMkFETTFWeVkyQURNMVZDT TNBRE0xVmlaMUFETTFWQ04yQURNMVZTTjJBRE0xVmlNMkFETTF WQ1oyQURNMVZTTjJBRE0xVmlaeUFETTFWaU0zQURNMVZTTjJBR E0xVlNPM0FETTFWU00yQURNMVZ5WTJBRE0xVkNNM0FETTFWaVp 5QURNMVZpTjNBRE0xVkNOM0FETTFWU1p5QURNMVZTTjNBRE0xV kNOM0FETTFWU04yQURNMVZTWjJBRE0xVmlaeUFETTFWaVp5QUR NMVZTWXpBRE0xVkNNM0FETTFWQ04zQURNMVZDTjNBRE0xVkNPM kFETTFWaU15QURNMVZDWnpBRE0xVlNaMkFETTFWaVoyQURNMVZ TTzJBRE0xVkNOM0FETTFWeU0yQURNMVZTTTJBRE0xVkNNeUFET TFWaU15QURNMVZDTjNBRE0xVnlNM0FETTFWaVoyQURNMVZDTTN BRE0xVmlNeUFETTFWQ1p6QURNMVZDTjJBRE0xVmlaMkFETTFWQ 08yQURNMVZDTjNBRE0xVlNOMkFETTFWQ1oyQURNMVZDTXlBRE0 xVmlNeUFETTFWU096QURNMVZTTnpBRE0xVkNOekFETTFWQ056Q URNMVZDTXpBRE0xVlNOekFETTFWU016QURNMVZ5TnpBRE0xVkN aeUFETTFWQ1oyQURNMVZpTTNBRE0xVmlaMkFETTFWaU4yQURNM VZpTXlBRE0xVkNaekFETTFWQ04yQURNMVZTTzJBRE0xVkNNeUF ETTFWQ015QURNMVZDWjJBRE0xVmlNM0FETTFWaVoyQURNMVZpT jJBRE0xVnlZekFETTFWeUo5VUdjaE4yY2w5Rkl5Rm1kJztldmF sKE9sMShPMGwoXzFJTykpKTs=">
const file = encodeBase64(__dirname + "/temp/template.docx");
ecvodeBase64 () является асинхронной функцией и возвращает обещание. Какое обещание возвращается либо в функцию обратного вызова .then () , либо нужно использовать ожидание для получения значения.
Подробнее можно глянуть тут
http://q-answer.ru/questions/kodirovat-fayl-docx-na-base64-v-javascript-1801.html