Java中使用Base64
来源:互联网 发布:java中链表 编辑:程序博客网 时间:2024/05/01 01:09
Java中使用Base64
参考资料:
Base64更详细描述可参考http://zh.wikipedia.org/zh/Base64
在线Base64http://www.motobit.com/util/base64-decoder-encoder.asp
关于Base64:
使用的字符:大小写字母各26个、10个数字、加号「+」、斜杠「/」,一共64个字符。等号「=」用来作为后缀用途。
编码的原理:
- 将三个byte的数据,先后放入一个24bit的缓冲区中,先来的byte占高位。数据不足3byte的话,於緩衝區中剩下的bit用0补足。然后,每次取出6(因为26=64)个bit,按照其值选择
ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/
中的字符作为编码后的输出。不断进行,直到全部输入数据转换完成。 - 如果最後剩下兩個輸入數據,在編碼結果後加1個「=」;如果最後剩下一個輸入數據,編碼結果後加2個「=」;如果沒有剩下任何數據,就什麼都不要加,這樣才可以保證資料還原的正確性。
- 在MIME邮件情况下,还额外规定,每76个字符需要加上一个回车换行。
例子
编码「Man」
文本Man ASCII编码7797110 二进制位010011010110000101101110 索引1922516Base64编码TWFu
Java代码
Jdk的rt.jar中包含了BASE64的编码、解码的相关代码,可直接使用。
或者也可从第三方开源实现中找。比如:我下载了iHarder.net的代码,发现就一个类,而且这个类连package都没有,可以直接放入你的代码中并使用。
- //import sun.misc.BASE64Decoder;
- //import sun.misc.BASE64Encoder;
- public class UsingBase64 {
- public static void main(String[] args) throws Exception {
- byte[] data = "http://lggege.iteye.com".getBytes();
- String encoded = null;
- byte[] decoded = null;
- // 编码(加密)
- // encoded = (new BASE64Decoder()).decodeBuffer(data);
- // decoded = (new BASE64Decoder()).decodeBuffer(encoded);
- // 解密(解密)
- encoded = Base64.encodeBytes(data);
- decoded = Base64.decode(encoded);
- System.out.println(encoded);
- System.out.println(new String(decoded));
- }
- }
注意:
如果使用JDK1.6,那么需要设置project的properties
Java Compiler - Errors/Warnings - Depracted and Restricted API - Forbidden reference(access rules) -ERROR
将ERROR 改成 WARNING 即可
总结
- Base64简单、易懂,不需要公钥、密钥等。可作为简单的加密、解密方案使用。
- 查看Base64编码后的文本,很容易发现是基于Base64编码的,因为使用基本字符(a-zA-Z0-9+/=),而且后面通常会有1个或2个=。所以,也可以很容易解码这些内容。
- 正由于如上原因,Base64一般不直接作为加密、解密的方案,而是将它与其他的解密方法一起使用。一般的加密方法如DES都会产生非常规字符(比如说乱码),可将DES加密后的内容再用Base64编码一次,得到基本字符,可以很容易的放入配置文件中。
附件
来自于 http://iharder.sourceforge.net/current/java/base64/ 的Base64实现
转:http://lggege.iteye.com/blog/868859
Java中的异或
在java程序里面的异或用法:
相同输出0,不同输出1,例如:
System.out.println(1^1); 输出0
System.out.println(1^2);输出3,因为最后2个低位都不一样,所有输出3
异域的概念是相同为0不同为1.如果两个数值异或后的值相同,异或前可能不同。
比如二进制:0010^0001=0011 而0000^0011=0011。 异或要慎用。
已到有意思的题目:很多成对出现数字保存在磁盘文件中,注意成对的数字不一定是相邻的,如2, 3, 4, 3, 4, 2……,由于意外有一个数字消失了,如何尽快的找到是哪个数字消失了?
由于有一个数字消失了,那必定有一个数只出现一次而且其它数字都出现了偶数次。用搜索来做就没必要了,利用异或运算的两个特性——1.自己与自己异或结果为0,2.异或满足
交换律。
public static int findLost(int a[]){
int result=0;
for(int i=0;i<a.length;i++) {
result^=a[i];
}
return result;
}
顺序打乱也没有关系。
转:http://longcxm.iteye.com/blog/1461543
- Java中使用Base64
- Java中使用Base64编码
- java中使用base64笔记
- Java中使用Base64编码实例
- java 中使用base64编码和解码:
- Java中Base64解码
- Java使用Base64
- Java使用Base64编码
- java中使用base64编码----
- Java中导入Base64 encode and decode包并使用
- java中Base64编码解码的编程使用
- grails中使用BASE64加密
- java中BASE64编码实例
- Java中Base64(实例)
- java的base64使用备注
- JAVA 使用BASE64加密、解密
- JAVA 使用BASE64加密、解密
- Java使用base64加解密
- 使用Storyboard 是优还是劣?
- 关于 rootViewController 的那些事(1)
- 视图控制器自带视图的创建过程详解
- OpenFlow – 打造弹性化的可控互联网
- ubuntu 12.0.4.3 安装 gcc 4.4 编译android源码
- Java中使用Base64
- 深入Python(Dive Into Python)第五章程序解析
- PHP关联数组的10个技巧
- IOS常用代码整理
- Javascript作用域链的总结 .
- 数学图形网站推荐 转载 http://xuxzmail.blog.163.com/blog/static/2513191620097983241171/
- 【指针】16周项目二
- android webview 缩放及换行
- DisconnextEx 函数