java密码学学习整理--email传输算法base64


1.base64由来

由于历史问题,电子邮件只允许ascII码字符,若是传输带有非ascII码的邮件就可能会出现乱码。因此,base64是将非ascII码的数据映射成ascII码的数据来传输的。


2.base64特性

一串原始数据经过base64编码后会变大,为原来的3/4倍。所以,在进行数据压时用到了base64编码往往压缩的效果不明显。

3.base64用法(参考自;http://www.educity.cn/blog/user1/14480/archives/2006/3649.html

Base64 编码是一种将二进制数据映射到一个可印刷字符集上的技术。Base64 编码使用由 ASCII 中 65 个字符组成的一个子集,包括大小写字母、数字和一些标点字符。Base64 encode/decode 选项对于防止意外生成的系统定界字符很有用。由于从 ENCRYPT 函数返回的字符串可能包含二进制字符,所以可能返回包含系统定界字符的密文,而这个定界字符之前是不存在的。如果使用该函数来加密一个记录中间的一个字段,那么 “意外” 插入的字段标记会打乱字段计数,之后就不可能一致地检索跟在错误后面的那些字段。但是可以使用其他方法来避免出现这种错误(例如将密文转换成 ASCII 十六进制表示形式),Base64 encode 选项是避免这种问题的既容易又有效的方法。

使用 Base64 编码时要注意的是,被编码的字符串返回时可能在后面带有换行字符,如果返回的字符串长度超过 65 字节,那么每过 65 字节就要插入一个换行字符。这些换行字符会影响到被加密数据的存储和显示。开发人员可能需要去掉换行字符,或者用 Base64 字符集以外的字符代替换行字符。在解码和解密数据之前,应该将换行字符放回密文中,以避免出现错误。

总结:http协议传输二进制数据时,要用base64编码格式对二进制数据进行编码.

下面补充一段《java加密与解密的艺术(第一版)》(梁栋著)关于密钥存储与base64关系的描述(page152):

"在计算机的世界里,密钥就是一段二进制的数据。...密钥的二进制表现形式使得它的安全性大为提升,但却大大降低了它的可读性。通常我们希望密钥可以有一个容易理解的表现形式(比如base64编码后的字符串),以增强它的可读性并且方便密钥的发放。“


一方面base64对于防止意外生成的系统定界字符很有用,另一方面,base64使得密钥具有可读性,方便密钥的发放。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值