Chuyển đổi base64 sang csv javascript

Mã hóa Base64 là một cách để chuyển đổi dữ liệu (thường là nhị phân) thành bộ ký tự ASCII. Điều quan trọng cần đề cập ở đây là Base64 không phải là một kỹ thuật mã hóa hoặc nén, mặc dù đôi khi nó có thể bị nhầm lẫn là mã hóa do cách nó che khuất dữ liệu. Trên thực tế, kích thước của một đoạn thông tin được mã hóa Base64 là 1. 3333 lần kích thước thực tế của dữ liệu gốc của bạn

Base64 là kỹ thuật mã hóa cơ sở được sử dụng rộng rãi nhất với Base16 và Base32 là hai lược đồ mã hóa thường được sử dụng khác

Base64 hoạt động như thế nào?

Chuyển đổi dữ liệu thành base64 là một quá trình gồm nhiều bước. Đây là cách nó hoạt động cho các chuỗi văn bản

  1. Tính phiên bản nhị phân 8 bit của văn bản đầu vào
  2. Nhóm lại phiên bản 8 bit của dữ liệu thành nhiều khối 6 bit
  3. Tìm phiên bản thập phân của từng đoạn nhị phân 6 bit
  4. Tìm ký hiệu Base64 cho từng giá trị thập phân qua bảng tra cứu Base64

Để hiểu rõ hơn về khái niệm này, chúng ta hãy xem một ví dụ

Giả sử chúng ta có chuỗi "Go win" và chúng ta muốn chuyển nó thành chuỗi Base64. Bước đầu tiên là chuyển đổi chuỗi này thành nhị phân. Phiên bản nhị phân của "Go win" là

01000111  01101111  00100000  01110111  01101001  01101110

Bạn có thể thấy ở đây mỗi ký tự được biểu thị bằng 8 bit. Tuy nhiên, như chúng tôi đã nói trước đó, Base64 chuyển đổi dữ liệu ở dạng nhị phân 8 bit thành các khối 6 bit. Điều này là do định dạng Base64 chỉ có 64 ký tự. 26 chữ cái viết hoa, 26 chữ cái viết thường, 10 ký tự số và ký hiệu "+" và "/" cho dòng mới

Base64 không sử dụng tất cả các ký tự đặc biệt ASCII, mà chỉ sử dụng một số ký tự này. Lưu ý rằng một số triển khai của Base64 sử dụng các ký tự đặc biệt khác với "+" và "/"

Quay lại ví dụ, chúng ta hãy chia dữ liệu 8 bit thành các khối 6 bit

010001  110110  111100  100000  011101  110110  100101  101110

Không phải lúc nào bạn cũng có thể chia dữ liệu thành các bộ 6 bit đầy đủ, trong trường hợp đó, bạn sẽ phải xử lý phần đệm

Bây giờ với mỗi đoạn trên, chúng ta phải tìm giá trị thập phân của nó. Các giá trị thập phân này đã được đưa ra dưới đây

Binary  Decimal
010001  17
110110  54
111100  60
100000  32
011101  29
110110  54
100101  37
101110  46

Cuối cùng, chúng ta phải xem giá trị Base64 cho từng số thập phân mà chúng ta vừa tính toán từ dữ liệu nhị phân. Bảng mã hóa Base64 trông như thế này

Ở đây bạn có thể thấy rằng số thập phân 17 tương ứng với "R" và số thập phân 54 tương ứng với "2", v.v. Sử dụng bảng mã hóa này, chúng ta có thể thấy rằng chuỗi "Go win" được mã hóa thành "R28gd2lu" bằng Base64. Bạn có thể sử dụng bất kỳ trình chuyển đổi văn bản trực tuyến nào sang Base64 để xác minh kết quả này

Tại sao nên sử dụng Mã hóa Base64?

Việc gửi thông tin ở định dạng nhị phân đôi khi có thể gặp rủi ro vì không phải tất cả các ứng dụng hoặc hệ thống mạng đều có thể xử lý dữ liệu nhị phân thô. Mặt khác, bộ ký tự ASCII được biết đến rộng rãi và rất đơn giản để xử lý đối với hầu hết các hệ thống.

Ví dụ: máy chủ email mong đợi dữ liệu văn bản, vì vậy ASCII thường được sử dụng. Do đó, nếu bạn muốn gửi hình ảnh hoặc bất kỳ tệp nhị phân nào khác tới máy chủ email, trước tiên bạn cần mã hóa nó ở định dạng dựa trên văn bản, tốt nhất là ASCII. Đây là nơi mã hóa Base64 cực kỳ hữu ích trong việc chuyển đổi dữ liệu nhị phân sang định dạng chính xác

Mã hóa chuỗi Base64 bằng nút. js

Cách dễ nhất để mã hóa chuỗi Base64 trong Node. js thông qua đối tượng Buffer. trong nút. js,

010001  110110  111100  100000  011101  110110  100101  101110
3 là một đối tượng toàn cầu, điều đó có nghĩa là bạn không cần sử dụng câu lệnh yêu cầu để sử dụng đối tượng
010001  110110  111100  100000  011101  110110  100101  101110
3 trong các ứng dụng của mình

Bên trong

010001  110110  111100  100000  011101  110110  100101  101110
3 là một mảng số nguyên bất biến cũng có khả năng thực hiện nhiều mã hóa/giải mã khác nhau. Chúng bao gồm đến/từ mã hóa UTF-8, UCS2, Base64 hoặc thậm chí Hex. Khi bạn viết mã xử lý và thao tác dữ liệu, có thể bạn sẽ sử dụng đối tượng
010001  110110  111100  100000  011101  110110  100101  101110
3 vào một thời điểm nào đó

Hãy xem ví dụ sau. Ở đây chúng tôi sẽ mã hóa một chuỗi văn bản thành Base64 bằng cách sử dụng đối tượng

010001  110110  111100  100000  011101  110110  100101  101110
3. Lưu đoạn mã sau vào tệp "encode-text. js"

'use strict';

let data = 'stackabuse.com';
let buff = new Buffer(data);
let base64data = buff.toString('base64');

console.log('"' + data + '" converted to Base64 is "' + base64data + '"');

Hãy xem hướng dẫn thực hành, thực tế của chúng tôi để học Git, với các phương pháp hay nhất, tiêu chuẩn được ngành chấp nhận và bao gồm bảng gian lận. Dừng các lệnh Git trên Google và thực sự tìm hiểu nó

Trong đoạn script trên, chúng tôi tạo một đối tượng bộ đệm mới và chuyển cho nó chuỗi mà chúng tôi muốn chuyển đổi thành Base64. Sau đó, chúng tôi gọi phương thức "toString" trên đối tượng bộ đệm mà chúng tôi vừa tạo và chuyển nó "base64" làm tham số. Phương thức "toString" với tham số "base64" sẽ trả về dữ liệu ở dạng chuỗi Base64. Chạy đoạn mã trên, bạn sẽ thấy đầu ra sau

$ node encode-text.js
"stackabuse.com" converted to Base64 is "c3RhY2thYnVzZS5jb20="

Ở đầu ra, chúng ta có thể thấy bản sao Base64 cho chuỗi mà chúng ta đã chuyển đổi thành Base64

Giải mã chuỗi Base64 bằng nút. js

Giải mã chuỗi Base64 khá giống với mã hóa nó. Bạn phải tạo một đối tượng bộ đệm mới và truyền hai tham số cho hàm tạo của nó. Tham số đầu tiên là dữ liệu trong Base64 và tham số thứ hai là "base64". Sau đó, bạn chỉ cần gọi "toString" trên đối tượng bộ đệm nhưng lần này tham số được truyền cho phương thức sẽ là "ascii" vì đây là loại dữ liệu mà bạn muốn dữ liệu Base64 của mình chuyển đổi thành. Hãy xem đoạn mã sau để tham khảo

'use strict';

let data = 'c3RhY2thYnVzZS5jb20=';
let buff = new Buffer(data, 'base64');
let text = buff.toString('ascii');

console.log('"' + data + '" converted from Base64 to ASCII is "' + text + '"');

Thêm dữ liệu vào "ascii. js" và lưu nó. Ở đây chúng tôi đã sử dụng "Tm8gdG8gUmFjaXNt" làm dữ liệu đầu vào Base64. Khi dữ liệu này được giải mã, nó sẽ hiển thị "Không phân biệt chủng tộc". Điều này là do từ ví dụ trước, chúng ta biết rằng "Không phân biệt chủng tộc" tương đương với "Tm8gdG8gUmFjaXNt". Chạy đoạn mã trên với Node. js. Nó sẽ hiển thị đầu ra sau

Mã hóa dữ liệu nhị phân thành chuỗi Base64

Như đã đề cập ở đầu bài viết, mục đích chính của mã hóa Base64 là chuyển đổi dữ liệu nhị phân sang định dạng văn bản. Hãy để chúng tôi xem một ví dụ nơi chúng tôi sẽ chuyển đổi một hình ảnh (dữ liệu nhị phân) thành một chuỗi Base64. Hãy xem ví dụ sau

'use strict';

const fs = require('fs');

let buff = fs.readFileSync('stack-abuse-logo.png');
let base64data = buff.toString('base64');

console.log('Image converted to base 64 is:\n\n' + base64data);

Trong đoạn mã trên, chúng tôi tải một hình ảnh vào bộ đệm thông qua phương pháp

010001  110110  111100  100000  011101  110110  100101  101110
4 của mô-đun
010001  110110  111100  100000  011101  110110  100101  101110
5. Phần còn lại của quy trình tương tự như tạo chuỗi Base64 từ chuỗi ASCII bình thường

Khi bạn chạy đoạn mã trên, bạn sẽ thấy đầu ra sau

$ node encode-image.js
Image converted to Base64 is:

iVBORw0KGgoAAAANSUhEUgAAABkAAAATCAYAAABlcqYFAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAAsTAAALEwEAmpwYAAABWWlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iWE1QIENvcmUgNS40LjAiPgogICA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyI+CiAgICAgICAgIDx0aWZmOk9yaWVudGF0aW9uPjE8L3RpZmY6T3JpZW50YXRpb24+CiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgpMwidZAAADuUlEQVQ4EbVUTUtcZxR+7ufkXp1SZ4iZRE1EDVQRnTAhowsZMFm40I2rNqUIIev8hvoPQroQXBTqwiAWcd0EglEhiZNajVZrQGXAWAzaZpzMnZn7lXPeeIe5DaWb9Ax33vOec8/znI/3vVI6nfbxP4v8b/iSJIGfzyGfkPi+D13XUalUBL6qqmIvy5+8WuX/r2RCkUzAoIuLi2hqaoLrutjb28P6+josyxJkiqJA07SQXiqVwHaOZYx/itLc3Px9YIxEIlheXsbExATGxsYwMjIiwEdHRwXA/Pw8EokEcrkcDg4OYJomVlZWMDU1JSqfmZlBR0cHbNsOtVoNCHjlTFiSySQMwxAVxONxQbi0tIRMJoPe3l5MT0+jtbUVg4ODYGImY18qlcL4+DhisZjoggCjv1C7uOyenh7Mzs5iY2ND6FQpdnd3sba2JloSjUYxPDyM/v5+TE5OYn9/X9jZtrOzg+3t7WqyAUmoEu419/+HBw9E+eVymbJqAJP39fWBCR3HEU+hUMDQ0JCYGc8um81iYGAAjY2N8DwvwBdraCY8tHhDA1Y3N9Hd3S2yvH37O7RcbsF7AuUsD9+8wdOFBTx/8QJtbW1C5/nMzc3R0D2UyxXk83lRXcAk1V5GCT5sSUGDbeHxy9/EO98M9OOXzT9wfHISxKC1vR0GHfOtrS2g/SouWwU0Xkggu7qO9PUkJFULnbIQyTm6ewu2hF+vnOIIUQwdGlg8f4QF6wvMWBq+pAkaskSnx4FFVUf0CNpcC797KizXQ4oAHhVdXJJ81F7j6kwUynPHlXDPdFB2fRj+KVK0KvT2rbp3uKYryJU11Cke8qqMuOoioeeJ1MPDYxM36m1cNSq4GdFx58RAWvbx8TrXnK4IgR16Em5GK4iqHi5GHHxLgcSDn97WgZPoND+GGZRpPYH85cgiiRQl1ltXxmFFQ5PuopP8TrW5ZyRcWp7AbmkeZefg5+N6PPnbRJdpw/YlfB0vQiPQZwVdZNtFZEVK6D1VTnccJlXzuqTjvOZiq6Rhj2KqLSJsofOHgIl8+t0/qsfDioxmSUWGjrRFzhYi/5Oynrdl3KXHIZDXtF6hil8R6I9FBV/RvDLnXKxSbAdVYhNeINXBMwmXWCTQGG2Y+Jj+dFrfEmiMAtmeowpo9ojTvkD+A/L1UJUMmiVfkuz6WTyZhFRJAgP33j3bsM5k/Fng68UP21hYJyyxZwLWuS2cKMfUSm3rhD0g4E2g197fwMZ+Bgt8rNe2iP2BhL5dgfFzrx8AfECEDdx45a0AAAAASUVORK5CYII=

Mặc dù hình ảnh thực tế rất nhỏ (25x19), đầu ra vẫn khá lớn, một phần là do Base64 tăng kích thước của dữ liệu, như chúng tôi đã đề cập trước đó

Giải mã chuỗi Base64 thành dữ liệu nhị phân

Quá trình đảo ngược ở đây rất giống với cách chúng ta giải mã các chuỗi Base64, như chúng ta đã thấy trong phần trước. Sự khác biệt lớn nhất là đích đầu ra và cách dữ liệu được ghi ở đó. Hãy xem ví dụ

010001  110110  111100  100000  011101  110110  100101  101110
0

Ở đây bạn có thể thấy rằng chúng tôi bắt đầu với dữ liệu Base64 (dữ liệu này cũng đã được nhận từ ổ cắm hoặc một số đường truyền thông khác) và chúng tôi tải nó vào một đối tượng

010001  110110  111100  100000  011101  110110  100101  101110
3. Khi tạo bộ đệm, chúng tôi cho biết bộ đệm ở định dạng
010001  110110  111100  100000  011101  110110  100101  101110
7, cho phép bộ đệm phân tích cú pháp cho phù hợp để lưu trữ nội bộ

Để lưu dữ liệu trở lại định dạng PNG thô, chúng tôi chỉ cần chuyển đối tượng

010001  110110  111100  100000  011101  110110  100101  101110
3 sang phương thức
010001  110110  111100  100000  011101  110110  100101  101110
9 của chúng tôi và nó sẽ thực hiện chuyển đổi cho chúng tôi

Sự kết luận

Mã hóa Base64 là một trong những cách phổ biến nhất để chuyển đổi dữ liệu nhị phân thành văn bản ASCII thuần túy. Đây là một định dạng rất hữu ích để giao tiếp giữa một hoặc nhiều hệ thống không thể dễ dàng xử lý dữ liệu nhị phân, như hình ảnh trong đánh dấu HTML hoặc yêu cầu web

trong nút. js, đối tượng

010001  110110  111100  100000  011101  110110  100101  101110
3 có thể được sử dụng để mã hóa và giải mã các chuỗi Base64 sang và từ nhiều định dạng khác, cho phép bạn dễ dàng chuyển đổi dữ liệu qua lại khi cần