常見“加密”算法之 base64


嚴格意義上來說,base64並不是一種加密算法,不過在不少網站的參數加密中都會使用到atob/btoa,因此將其做一個簡單的實現。

 

base64使用64個字符來對信息進行編碼,64個字符依次是ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/ 最后兩個字符在不同協議中會有所不同,並且在實際需要加密的場景中,64個字符也有可能是亂序排列。

base64對信息進行編碼依次為以下幾個步驟:

1.將字符串逐個轉變為其ASCII碼值

2.將每個ASCII碼值轉變為8位二進制數值后連在一起

3.如果字符串的二進制數值連起來之后的長度不是6的整數倍,那么在后面補0直到是6的整數倍為止

4.從3得到的字符串中每6位作為一組,轉為整型。

5.將4中得到的整型值作為索引,從64個字符中取出對應的字符

6.如果5得到的字符串長度不是3的整數倍,那么在后面補上=直到是3的整數倍為止。

python代碼如下(不要在意變量命名)

 1 s = '123abc'
 2 p = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
 3 l = ''
 4 for i in s:
 5     asc = ord(i)
 6     b = bin(asc)
 7     if len(b)<10:
 8         n = 10 - len(b)
 9         b = '0'*n + b[2:]
10     l += b
11 if len(l)%6:
12     n = 6 - len(l)%6
13     l += '0'*n
14 encrypt = ''
15 for i in range(0, len(l), 6):
16     tt = l[i:i+6]
17     n = int(tt, 2)
18     encrypt += p[n]
19 if len(s)%3:
20     n = 3 - len(s)
21     encrypt += '='*n
22 print(encrypt)

最后使用base64模塊對結果進行對比檢驗,結果吻合

 

注意!以上方案有一個非常嚴重的缺陷就是如果字符不在ASCII碼表中應該如何處理!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM