ASCII&Base64

ASCII

https://zh.wikipedia.org/wiki/ASCII

  • American Standard Code for Information Interchange,美國信息交換標準代碼
  • 33個控制字符和95個可見字符

控制字符

說明:

  • Unicode表示法:當我們想在畫面或紙張上表示這些控制字符時,就會顯示成這個樣子。過于老舊的系統(tǒng)或瀏覽器可能會看不到。使用微軟任一中文輸入法,輸入U2400即可看到?,輸入U2401可看到?,依此類推。
  • 脫出字符表示法:通常用于終端機連接(例如Telnet通信協(xié)議),以脫出字符開頭,再接一個符號,用來讓這些控制字符得以在畫面上顯現(xiàn)。雖然看起來是兩個字符,但在終端機上實際只有一個字符。在絕大部分的終端機系統(tǒng)中,包括Windows的命令提示字符(cmd.exe)、Linux和FreeBSD,都可用Ctrl代表脫出字符,輸入想要的ASCII控制字符。例如想輸入空字符,就要輸入Ctrl+2,而非@,后者會顯示成兩字符,前者只會顯示成一字符。
image

可見字符

image

記住常用的ASCII碼

字母   十六進制
1      31 
A      41
a      61

Base64

https://zh.wikipedia.org/wiki/Base64

Base64是一種基于64個可打印字符來表示二進制數(shù)據(jù)的表示方法。由于2^6=64,所以每6個比特為一個單元,對應(yīng)某個可打印字符。3個字節(jié)有24個比特,對應(yīng)于4個Base64單元,即3個字節(jié)可表示4個可打印字符。它可用來作為電子郵件的傳輸編碼。在Base64中的可打印字符包括字母A-Z、a-z、數(shù)字0-9,這樣共有62個字符,此外兩個可打印符號在不同的系統(tǒng)中而不同。

例子

舉例來說,一段引用自托馬斯·霍布斯利維坦》的文句:

Man is distinguished, not only by his reason, but by this singular passion from other animals, which is a lust of the mind, that by a perseverance of delight in the continued and indefatigable generation of knowledge, exceeds the short vehemence of any carnal pleasure.

經(jīng)過Base64編碼之后變成:

TWFuIGlzIGRpc3Rpbmd1aXNoZWQsIG5vdCBvbmx5IGJ5IGhpcyByZWFzb24sIGJ1dCBieSB0aGlz
IHNpbmd1bGFyIHBhc3Npb24gZnJvbSBvdGhlciBhbmltYWxzLCB3aGljaCBpcyBhIGx1c3Qgb2Yg
dGhlIG1pbmQsIHRoYXQgYnkgYSBwZXJzZXZlcmFuY2Ugb2YgZGVsaWdodCBpbiB0aGUgY29udGlu
dWVkIGFuZCBpbmRlZmF0aWdhYmxlIGdlbmVyYXRpb24gb2Yga25vd2xlZGdlLCBleGNlZWRzIHRo
ZSBzaG9ydCB2ZWhlbWVuY2Ugb2YgYW55IGNhcm5hbCBwbGVhc3VyZS4=

編碼

編碼Man,在此例中,Base64算法將3個字節(jié)編碼為4個字符。

image

Base64索引表:

image

如果要編碼的字節(jié)數(shù)不能被3整除,最后會多出1個或2個字節(jié),那么可以使用下面的方法進行處理:先使用0字節(jié)值在末尾補足,使其能夠被3整除,然后再進行Base64的編碼。在編碼后的Base64文本后加上一個或兩個=號,代表補足的字節(jié)數(shù)。也就是說,當最后剩余兩個八位字節(jié)(2個byte)時,最后一個6位的Base64字節(jié)塊有四位是0值,最后附加上兩個等號;如果最后剩余一個八位字節(jié)(1個byte)時,最后一個6位的base字節(jié)塊有兩位是0值,最后附加一個等號。 參考下表:

image

Java&Base64

Java如何進行Base64的編碼(Encode)與解碼(Decode)?

// java8
final Base64.Decoder decoder = Base64.getDecoder();
final Base64.Encoder encoder = Base64.getEncoder();
final String text = "字串文字";
final byte[] textByte = text.getBytes("UTF-8");
//編碼
final String encodedText = encoder.encodeToString(textByte);
System.out.println(encodedText);
//解碼
System.out.println(new String(decoder.decode(encodedText), "UTF-8"));

Shiro也提供了對Base64的操作

// org.apache.shiro.codec.Base64
String str = "hello";
String base64Encoded = Base64.encodeToString(str.getBytes());
String str2 = Base64.decodeToString(base64Encoded);
Assert.assertEquals(str, str2);
?著作權(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)容

  • 在說常見的字符編碼(ASCII、gb2312、gbk、utf-8等)之前,我們先來看看編碼的歷史吧。 編碼編年史 ...
    craneyuan閱讀 1,004評論 4 4
  • CTF中那些腦洞大開的編碼和加密 0x00 前言 正文開始之前先閑扯幾句吧,玩CTF的小伙伴也許會遇到類似這樣的問...
    查無此人asdasd閱讀 6,474評論 0 19
  • 0x01 目錄 常見編碼: ASCII編碼 Base64/32/16編碼 shellcode編碼 Quoted-p...
    H0f_9閱讀 13,526評論 2 17
  • 可以看我的博客 lmwen.top 或者訂閱我的公眾號 簡介有稍微接觸python的人就會知道,python中...
    ayuLiao閱讀 3,400評論 1 5
  • 端午假期就該交的作業(yè),拖到了現(xiàn)在。此時,仍然不知道要寫些什么。就是那種感覺,蹲在廁所里,想拉卻怎么拉都拉不出來。 ...
    靜恰恰閱讀 716評論 0 2

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