日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Hex编码与Base64编码

發布時間:2023/12/20 编程问答 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Hex编码与Base64编码 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Hex編碼與Base64編碼

  • 什么是明文
  • 什么是編碼
  • Hex編碼
    • Hex編碼實現細節
    • 自定義Hex編碼
  • Base64編碼
    • Base64編碼實現細節
    • 自定義Base64編碼

什么是明文

介紹什么是編碼之前,首先了解下什么是明文,表示其本身意思的,他就是明文

比如你看到"E6988E",如果是明文他就代表他自己,也就是當他表示"E6988E"時, 但是他如果是Hex編碼后的,那他就代表"明"

什么是編碼

由于計算機存儲的都是二進制數,得通過編碼轉換成人能認識得東西,中文就是UTF8編碼或者Unicode編碼后的結果有些網站不想讓你看到他發送至服務端的數據,會通過加密算法對數據進行加密(對字節進行位運算),加密完把字節toString會導致亂碼(位運算完的字節大多數無法在UTF8碼表或者Unicode編碼中找到可見字符),所以有了Hex編碼和Base64編碼

Hex編碼

Hex編碼是一種用16個字符(0123456789ABCDEF)表示任意二進制數據的方法,是一種編碼,并非加密字符編碼,“明"通過Hex編碼后是"E6988E”

Hex編碼實現細節

//查看com.sun.org.apache.xerces.internal.impl.dv.util下HexBin類可知static public String encode(byte[] binaryData) {if (binaryData == null)return null;int lengthData = binaryData.length;//由此可見,Hex編碼的字節長度是原字節長度的2倍int lengthEncode = lengthData * 2;char[] encodedData = new char[lengthEncode];int temp;for (int i = 0; i < lengthData; i++) {temp = binaryData[i];//這里是有符號數轉無符號數if (temp < 0)temp += 256;//lookUpHexAlphabet就是碼表//取當前字節的高四位encodedData[i*2] = lookUpHexAlphabet[temp >> 4];//取當前字節的低四位encodedData[i*2+1] = lookUpHexAlphabet[temp & 0xf];}return new String(encodedData);}

由此可知,Hex編碼就是分別獲取前字節的高四位和低四位轉換成十進制數,當作索引去碼表里面獲取對應的字符拼接返回 二進制數00000000-00001111代表的范圍是0-15,和碼表里面的字符一一對應 PS:8位為一個字節,取出來四位后會在前面補零,然后轉10進制

自定義Hex編碼

了解清楚Hex編碼的實現機制后,就可以開始自定義Hex編碼了,能看到這里把HexBin的方法扣過來,編碼出來的結果是一樣的,改一下碼表就能實現自定義Hex編碼了

當我們把碼表換了后,編碼出來的數據與之前完全不一樣了,因為相同的索引對應的字符已經不是之前那個了,如果需要解碼成功,也需要更換解碼的碼表,否則會亂碼

Base64編碼

Base64是一種用64個字符表示任意二進制數據的方法,是一種編碼,并非加密字符編碼
由 A-Z a-z 0-9 + / 和補充字符 “=” 組成,Base64編碼后的字符數是4的倍數(不足會補"=")

Base64編碼實現細節

具體和Hex編碼類似
Hex編碼是4個比特轉換成一個新的字符串,Base64是6個比特轉換成一個新的字符串,而6個比特(0011 1111)最能表示的十進制數為63,加上0為64,跟進源碼可以看出,Base64有倆碼表

因為"+“和”/"出現在url中的話,后端接收會出問題

什么時候補"=" 比如針對字符"S",字符"S"在UTF8碼表中為:83,所以字符串"S"的二進制數為:0101 0011 由于Base64編碼以6個比特位一組進行編碼,所以可以寫為:010100 11 由于不足補零得到二進制數:010100 110000 Base64編碼后的字符數是4的倍數所以得到二進制數:010100 110000 000000 000000 然后6個比特為一組,轉換成十進制數可得:2048,由于后面倆組比特位是補位來的,會直接轉換成"="字符 在Base64碼表中20對應得字符是"U"Base64碼表中48對應得字符是"w" PS:標準的Base64碼表是A-Z a-z 0-9 + / 按順序來的 所以字符串"S"Base64編碼結果位:Uw==

自定義Base64編碼

和自定義Hex編碼同理,修改碼表即可,對應解碼也需要使用修改后的碼表

總結

以上是生活随笔為你收集整理的Hex编码与Base64编码的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。