安全URL的Base64編碼

來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。

之前在《網址壓縮的調研分析(續)》介紹過Base62演算法,他是一種類似於Base64的雜湊演算法。今天發現了另一種最佳化的Base64演算法,又參考了下Golang的源碼,在encoding/base64/base64.go裡面。

const encodeStd = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"

傳統的Base64用的是A-Z、a-z、0-9,還有+和/,一個64個編碼串。

然而,標準的Base64並不適合直接放在URL裡傳輸,因為URL編碼器會把標準Base64中的“/”和“+”字元變為形如“%XX”的形式,而這些“%”號在存入資料庫時還需要再進行轉換,因為ANSI SQL中已將“%”號用作萬用字元。

為解決此問題,可採用一種用於URL的改進Base64編碼,它不在末尾填充’=’號,並將標準Base64中的“+”和“/”分別改成了“-”和“_”,這樣就免去了在URL編解碼和資料庫儲存時所要作的轉換,避免了編碼資訊長度在此過程中的增加,並統一了資料庫、表單等處物件識別碼的格式。

base64.go檔案裡還定義了專用於URL裡傳輸的URL安全的Base64演算法。

const encodeURL = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_"

把之前的加號換成了減號,斜線換成了底線。

就是因為這個原因,我發現我的一個編碼結果和應該得到的只相差一位,一個是加號,一個是減號。因為如果是編碼串不同的原因,哪怕就是差一位,結果也是完全不同的,差一位肯定不是因為這個。原來是這樣,懂得還是太少了。。。

######參考文獻+ Base64 - 維基百科

原文連結:安全URL的Base64編碼,轉載請註明來源!

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.