使用:
- 德爾福 10.2.3 東京
- IPWorks SSL、IPWorks 加密
我正在撰寫一個 Delphi 應用程式來從 Amazon MWS API 獲取訂單串列。
我在這里按照他們的指示進行操作:
uj5u.com熱心網友回復:
那是因為您根本不了解Base64的全部內容,包括如何正確撰寫它。它的主要目的是通過 7 位(即 ASCII)安全地攜帶 8 位資料(即整個位元組):
- 編碼時取 6 位并顯示為一個字母。
- 解碼時取一個字母,恢復6bit原始資料。
這也是編碼將大小膨脹 1/3 的原因。在電子郵件中發送附件時,前者存盤在 Base64 中,因為電子郵件只有 7 位安全。這就是為什么發送 4 MiB 大圖片最終會產生至少 5.2 MiB 的電子郵件的原因。
不,Base64 編碼已經是 ASCII 并且因此是 7 位安全的東西是沒有意義的。當有人想讓他對文本進行 Base64 編碼時,每個人都應該感到震驚
9660152e55a7178db9a9521cd80b7f4872f4be2290d1dd0f32205708f2e06589。你想編碼位元組,而不是文本。你看到的是這些位元組的十六進制表示。你實際上想要這個:
var input: Array of Byte; output: String; begin SetLength( input, 32 ); // Represented in hexadecimal it would be a text of 64 characters input[0]:= $96; input[1]:= $60; input[2]:= $15; ... output:= TNetEncoding.Base64.Encode( input ); if output<> 'lmAVLlWnF425qVIc2At/SHL0viKQ0d0PMiBXCPLgZYk=' then Halt(); // Expected output當試圖解碼您期望的內容并直視它時,這一點更加明顯:一次就好像它是文本一樣,一次是每個字符實際具有的位元組值(因為您會看到它根本不是文本)。文本不是位元組,反之亦然。這就是 Base64 存在的原因。不只是為了好玩。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/343687.html
