亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么我們使用Base64?

為什么我們使用Base64?

冉冉說 2019-11-21 12:46:24
當需要對二進制數據進行編碼時,通常需要使用Base64編碼方案,該二進制數據需要在旨在處理文本數據的媒體上存儲和傳輸。這是為了確保數據在傳輸過程中保持完整而無需修改。但是,不是因為我們的機器存儲的內存始終以二進制形式存儲/傳輸數據,而是僅以二進制形式存儲/傳輸數據嗎?因此,無論您編碼位模式010011010110000101101110為ManASCII或如TWFu為Base64,你最終將存儲相同的位模式。如果最終編碼是用零和一表示的,并且每臺機器和媒體都可以處理它們,那么將數據表示為ASCII還是Base64有什么關系呢?“旨在處理文本數據的媒體”是什么意思?他們可以處理二進制=>他們可以處理任何東西。謝謝大家,我想我現在明白了。當我們發送數據時,我們不能確定數據將以我們期望的格式解釋。因此,我們發送雙方都可以理解的以某種格式(例如Base64)編碼的數據。這樣,即使發送方和接收方對相同內容的解釋不同,但由于它們在編碼格式上達成共識,因此不會錯誤地解釋數據。以Mark Byers為例如果我要發送Helloworld!一種方法是像ASCII一樣發送72 101 108 108 111 10 119 111 114 108 100 33但是字節10可能無法在另一端正確解釋為換行符。因此,我們使用ASCII的子集對其進行編碼,如下所示83 71 86 115 98 71 56 115 67 110 100 118 99 109 120 107 73 61 61即使接收器碰巧對其余字符集有不同的解釋,這也會以相同信息量傳輸更多數據為代價,從而確保接收器可以按預期方式解碼數據。
查看完整描述

3 回答

?
慕村9548890

TA貢獻1884條經驗 獲得超4個贊

您的第一個錯誤是認為ASCII編碼和Base64編碼可以互換。他們不是。它們用于不同的目的。


使用ASCII編碼文本時,您將從文本字符串開始并將其轉換為字節序列。

在Base64中對數據進行編碼時,您將從字節序列開始并將其轉換為文本字符串。

要了解為什么首先需要Base64,我們需要一些計算歷史。


計算機以二進制形式(0和1)進行通信,但是人們通常希望與更豐富的表單數據(例如文本或圖像)進行通信。為了在計算機之間傳輸此數據,首先必須將其編碼為0和1,然后發送,然后再次解碼。以文本為例-有許多不同的方法可以執行此編碼。如果我們都可以同意一個編碼,這會簡單得多,但不幸的是事實并非如此。


最初,創建了許多不同的編碼(例如Baudot碼),每個字符使用不同的位數,直到最終ASCII成為每個字符7位的標準。但是,大多數計算機將二進制數據存儲在每個字節由8位組成的字節中,因此ASCII不適合傳輸此類數據。有些系統甚至會擦除最高位。此外,跨系統的行尾編碼的差異意味著有時還會修改ASCII字符10和13。


為了解決這些問題,引入了Base64編碼。這樣,您就可以將ribribry字節編碼為已知可以安全發送而不損壞的字節(ASCII字母數字字符和幾個符號)。缺點是使用Base64編碼消息會增加其長度-每3個字節的數據就會編碼為4個ASCII字符。


發送文本可靠,你可以先編碼,使用您的選擇(例如UTF-8),然后的文本編碼字節后的Base64編碼生成的二進制數據轉換為文本字符串,它是安全發送編碼為ASCII。接收者將不得不逆轉此過程以恢復原始消息。當然,這要求接收者知道使用了哪種編碼,并且該信息通常需要單獨發送。


從歷史上看,它已用于對電子郵件中的二進制數據進行編碼,其中電子郵件服務器可能會修改行尾。一個更現代的示例是使用Base64編碼將圖像數據直接嵌入HTML源代碼中。在這里,有必要對數據進行編碼,以避免像“ <”和“>”這樣的字符被解釋為標簽。


這是一個工作示例:


我希望發送兩行短信


你好

世界!

如果以ASCII(或UTF-8)格式發送,則如下所示:


72 101 108 108 111 10 119 111 114 108 100 33

字節10在某些系統中已損壞,因此我們可以將這些字節以64為基數編碼為Base64字符串:


SGVsbG8sCndvcmxkIQ ==

使用ASCII編碼時,如下所示:


83 71 86 115 98 71 56 115 67 110 100 118 99 109 120 107 73 61 61

這里的所有字節都是已知的安全字節,因此,幾乎沒有任何系統會破壞此消息的機會。我可以發送此消息而不是原始消息,然后讓接收者撤消該過程以恢復原始消息。


查看完整回答
反對 回復 2019-11-21
?
長風秋雁

TA貢獻1757條經驗 獲得超7個贊

用XML編碼二進制數據

假設您要在XML文檔中嵌入幾個圖像。圖像是二進制數據,而XML文檔是文本。但是XML無法處理嵌入式二進制數據。你是怎么做到的?


一種選擇是將圖像編碼為base64,將二進制數據轉換為XML可以處理的文本。


代替:


<images>

  <image name="Sally">{binary gibberish that breaks XML parsers}</image>

  <image name="Bobby">{binary gibberish that breaks XML parsers}</image>

</images>

你做:


<images>

  <image name="Sally" encoding="base64">j23894uaiAJSD3234kljasjkSD...</image>

  <image name="Bobby" encoding="base64">Ja3k23JKasil3452AsdfjlksKsasKD...</image>

</images>

XML解析器將能夠正確解析XML文檔并提取圖像數據。


查看完整回答
反對 回復 2019-11-21
  • 3 回答
  • 0 關注
  • 1033 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號