iOS 中的 Base64 編碼

Base64 是一種基于 64 個可打印字符來表示二進(jìn)制數(shù)據(jù)編碼方式,廣泛運用在處理文本數(shù)據(jù)的場合,表示、傳輸、存儲一些二進(jìn)制數(shù)據(jù),包括 MIME 的電子郵件及 XML 的一些復(fù)雜數(shù)據(jù)。

通過 Base64 編碼后的數(shù)據(jù)比原始數(shù)據(jù)略長,為原來的 4/3,原因是 Base64 是將三個字節(jié)拆分成 4 個 6bit 段進(jìn)行編碼。

Base64 編碼的具體步驟如下

  • 對于原始數(shù)據(jù),以每 3 個 8bit 為一組,獲得 24bit
  • 將 24bit 劃分為 4 組,每組 6bit
  • 將每組 bit 的高位補充 2 個 0,獲得 4 個 8bit
  • 將 4 個 8bit 轉(zhuǎn)換為 10 進(jìn)制,對照 Base64 參照表進(jìn)行編碼替換
Base64編碼參照表

這里需要注意的點

  • 對于 URL 而言,Base64 參照表的 "+" 和 "/" 是保留字,不會進(jìn)行 URL 編碼,這樣會對解析 URL 產(chǎn)生錯誤,因此需要先將它們替換成諸如 "-_" 等字符,然后參與 URL 編碼
  • 由于編碼的是 8bit 字符,因此對于超過 8bit 的字符,如中文字符等,需要進(jìn)行 UTF8 編碼后再進(jìn)行 Base64 編碼
  • 字符串末尾有時不足 3 個字符,需要補充 "=" 進(jìn)行占位,具體來說
    • 對于末尾只有 1 個字符的情況,轉(zhuǎn)換為 8bit 二進(jìn)制數(shù)據(jù)后,末尾補 0,填充至 12bit,轉(zhuǎn)換為 2 個 Base64 編碼字符,然后再補充 2 個 "=" 作為結(jié)束符
    • 對于末尾只有 2 個字符的情況,轉(zhuǎn)換為 8bit 二進(jìn)制數(shù)據(jù)后,末尾補 0,填充至 18bit,轉(zhuǎn)換為 3 個 Base64 編碼字符,然后再補充 1 個 "=" 作為結(jié)束符
Basse64末尾補0

iOS 中的 Base64 編碼與解碼如下所示

    NSString *target = @"TEST";
    NSData *data = [target dataUsingEncoding:NSUTF8StringEncoding];
    NSString *base64Str = [data base64EncodedStringWithOptions:nil];
    NSString *base64DecodeStr = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 了解CTF的朋友們,肯定對一種題型不陌生——Misc,Misc里面有各種各樣的編碼,眼花繚亂的文本通過層層解碼后得...
    Ackerzy閱讀 12,103評論 1 30
  • 1、Base64編碼原理 下圖為Base64編碼索引表: 字符選用了"A-Z、a-z、0-9、+、/" 64個可打...
    M_JCs閱讀 1,883評論 1 9
  • 一、什么是Base64編碼? Base64是網(wǎng)絡(luò)上最常見的用于傳輸8Bit字節(jié)碼的編碼方式之一,Base64就是一...
    知豬俠_DC閱讀 1,410評論 2 50
  • 相關(guān)文章:Base64 之 JavaScript 實現(xiàn)在Web前端還可以這樣實現(xiàn)Base64 什么是Base64 ...
    JSON_NULL閱讀 1,750評論 0 4
  • 又是一個萬里無云的周五,慣例去校醫(yī)院開藥。暑假期間的校醫(yī)院,看起來更像是一個老年社區(qū)醫(yī)院。清晨的風(fēng)穿過大堂...
    帆帆帆er閱讀 179評論 0 0

友情鏈接更多精彩內(nèi)容