博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ASCII&Base64
阅读量:7186 次
发布时间:2019-06-29

本文共 2239 字,大约阅读时间需要 7 分钟。

  hot3.png

ASCII

  • American Standard Code for Information Interchange,美国信息交换标准代码
  • 33个控制字符和95个可见字符

控制字符

说明:

  • Unicode表示法:当我们想在画面或纸张上表示这些控制字符时,就会显示成这个样子。过于老旧的系统或浏览器可能会看不到。使用微软任一中文输入法,输入U2400即可看到␀,输入U2401可看到␁,依此类推。
  • 脱出字符表示法:通常用于终端机连接(例如Telnet通信协议),以脱出字符^开头,再接一个符号,用来让这些控制字符得以在画面上显现。虽然看起来是两个字符,但在终端机上实际只有一个字符。在绝大部分的终端机系统中,包括Windows的命令提示字符(cmd.exe)、Linux和FreeBSD,都可用Ctrl代表脱出字符,输入想要的ASCII控制字符。例如想输入空字符,就要输入Ctrl+2,而非^@,后者会显示成两字符,前者只会显示成一字符。

可见字符

记住常用的ASCII码

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

Base64

Base64是一种基于64个可打印字符来表示二进制数据的表示方法。由于2^6=64,所以每6个比特为一个单元,对应某个可打印字符。3个字节有24个比特,对应于4个Base64单元,即3个字节可表示4个可打印字符。它可用来作为电子邮件的传输编码。在Base64中的可打印字符包括字母A-Z、a-z、数字0-9,这样共有62个字符,此外两个可打印符号在不同的系统中而不同。

例子

举例来说,一段引用自《》的文句:

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.

经过Base64编码之后变成:

TWFuIGlzIGRpc3Rpbmd1aXNoZWQsIG5vdCBvbmx5IGJ5IGhpcyByZWFzb24sIGJ1dCBieSB0aGlzIHNpbmd1bGFyIHBhc3Npb24gZnJvbSBvdGhlciBhbmltYWxzLCB3aGljaCBpcyBhIGx1c3Qgb2YgdGhlIG1pbmQsIHRoYXQgYnkgYSBwZXJzZXZlcmFuY2Ugb2YgZGVsaWdodCBpbiB0aGUgY29udGludWVkIGFuZCBpbmRlZmF0aWdhYmxlIGdlbmVyYXRpb24gb2Yga25vd2xlZGdlLCBleGNlZWRzIHRoZSBzaG9ydCB2ZWhlbWVuY2Ugb2YgYW55IGNhcm5hbCBwbGVhc3VyZS4=

编码

编码Man,在此例中,Base64算法将3个字节编码为4个字符。

Base64索引表:

如果要编码的字节数不能被3整除,最后会多出1个或2个字节,那么可以使用下面的方法进行处理:先使用0字节值在末尾补足,使其能够被3整除,然后再进行Base64的编码。在编码后的Base64文本后加上一个或两个=号,代表补足的字节数。也就是说,当最后剩余两个八位字节(2个byte)时,最后一个6位的Base64字节块有四位是0值,最后附加上两个等号;如果最后剩余一个八位字节(1个byte)时,最后一个6位的base字节块有两位是0值,最后附加一个等号。 参考下表:

Java&Base64

// java8final 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.Base64String str = "hello";String base64Encoded = Base64.encodeToString(str.getBytes());String str2 = Base64.decodeToString(base64Encoded);Assert.assertEquals(str, str2);

转载于:https://my.oschina.net/yysue/blog/1629989

你可能感兴趣的文章
Java的编程规则
查看>>
我的友情链接
查看>>
java中面向对象的一点学习总结
查看>>
尝试用idb文件回复单个表
查看>>
CGI
查看>>
nginx配置http2
查看>>
project.pbxproj 文件的组织及说明
查看>>
Android 网络请求方面的资料
查看>>
ajax跨域的解决办法
查看>>
ZooKeeper管理指南
查看>>
jqGrid随浏览器缩放自适应宽度
查看>>
JavaScript函数补完:splice()数组操作
查看>>
Souce Control Management-EGit
查看>>
长连接的心跳及重连设计
查看>>
ORA-00020: maximum number of processes (1000) 错误处理
查看>>
cas单点登录集群如何优雅的退出
查看>>
[置顶] spring2.5 + struts2 + ibatis2.3.4 框架整合开发
查看>>
第一次作业
查看>>
我的友情链接
查看>>
我的友情链接
查看>>