Java加密与解密的艺术-Base64
2015-08-27 14:56
561 查看
Base64是一种基于64个字符的编码算法,经过Base64编码后的数据会比原始数据略长,为原来的4/3倍。
Bouncy Castle与Commons Codec有差别:Bouncy Castle使用”.”作为补位符,而Commons Codec则完全杜绝使用补位符。
尽管如此,Base64仍不能被称为加密算法。Base64算法公开,这一点与柯克霍夫原则并无违背,但充当密钥的字符映射表公开,直接违反了柯克霍夫原则,而且Base64的加密强度并不够高。因此不能讲Base64看做我们认可的现代加密算法。
Base64算法常作为密钥、密文和证书的一种通用存储编码格式,与加密算法形影不离。
Url Base64算法定义有别于RFC 2045,它不需要定义每行字符数及行末回车换行符。符号”+”和符号”/”是不允许出现在URL中的,RFC 4648中给出了相应的替代符号”-“和”_”。同样,符号”=”用作参数分隔符,也不允许出现在URL中。符号”=”在Base64算法中用作填充符。
Commons Codec的Url Base64算法实现遵循了RFC 4648绝大部分定义,为避免可能的错误,使用不定长Base64编码,抛弃了填充符。
不论是通过HTTP的GET方式以URL作为参数传递数据还是通过POST方式以数据体传输数据,都能发现Base64编码藏匿其中。
如甲方向乙方发送密钥,可以将密钥以二进制形式转换为Base64编码后的字符串形式,通过安全途径以文档形式发送给乙方,密钥很可能被要求写在合同中。
数字证书Base64编码形式。它遵循RFC 2045对电子邮件的Base64编码格式要求,每间隔76个字符添加一个回车换行符。在HTTP网络中,数字证书就是以这种编码形式传输的。
代码参见github:
https://github.com/DISSIDIA-986/EncDecAboutJava
Bouncy Castle与Commons Codec有差别:Bouncy Castle使用”.”作为补位符,而Commons Codec则完全杜绝使用补位符。
尽管如此,Base64仍不能被称为加密算法。Base64算法公开,这一点与柯克霍夫原则并无违背,但充当密钥的字符映射表公开,直接违反了柯克霍夫原则,而且Base64的加密强度并不够高。因此不能讲Base64看做我们认可的现代加密算法。
Base64算法常作为密钥、密文和证书的一种通用存储编码格式,与加密算法形影不离。
Url Base64算法定义有别于RFC 2045,它不需要定义每行字符数及行末回车换行符。符号”+”和符号”/”是不允许出现在URL中的,RFC 4648中给出了相应的替代符号”-“和”_”。同样,符号”=”用作参数分隔符,也不允许出现在URL中。符号”=”在Base64算法中用作填充符。
Commons Codec的Url Base64算法实现遵循了RFC 4648绝大部分定义,为避免可能的错误,使用不定长Base64编码,抛弃了填充符。
不论是通过HTTP的GET方式以URL作为参数传递数据还是通过POST方式以数据体传输数据,都能发现Base64编码藏匿其中。
如甲方向乙方发送密钥,可以将密钥以二进制形式转换为Base64编码后的字符串形式,通过安全途径以文档形式发送给乙方,密钥很可能被要求写在合同中。
数字证书Base64编码形式。它遵循RFC 2045对电子邮件的Base64编码格式要求,每间隔76个字符添加一个回车换行符。在HTTP网络中,数字证书就是以这种编码形式传输的。
代码参见github:
https://github.com/DISSIDIA-986/EncDecAboutJava
相关文章推荐
- spring Bean-实例请求触发放回引用(工厂模式)
- Java汉字验证码
- JavaVisualVM监控远端JAVA程序
- spring transaction 注解方法报错Can not set field to proxy
- 安卓RSA加密,适配javaweb
- eclipse中使用jetty进行远程调试
- struts2表单验证里field-validator type值一共可以取哪些?都什么含义?
- Eclipse开发必备干货分享
- MyEclipse优化设置(最详细版本)
- java axis2 webservice
- struts2文件上传时获取上传文件的大小
- Spring MVC 开发 配置
- Java基础知识强化02:import static 和 import
- Spring mvc学习笔记
- 由freemarker毫秒级时间谈固定日期格式
- java7 Fork/Join
- spring与mybatis四种整合方法
- Spring MVC之@RequestBody, @ResponseBody 详解
- Spring MVC之@RequestParam @RequestBody @RequestHeader 等详解
- 简单说下struts2@Action和@Results