首页 > 代码库 > Base64编码
Base64编码
Base64编码是一种编码,它不是MessageDigest(多对一映射),说它是一种密码有点牵强,因为这种密码太简单了,是最原始的密码.
对于一个byte[]b,按照它是大头序来顺次读取每一个bit,每个6位做一个分隔,所得结果也按照大头序来解析.
每个6位对应一个整数x,这个x决定了这个6位小分队应该用哪一个ascii码来表示.
编码前的24个bit变成了4个6位小分队,表现形式是4个byte,所以编码之后长度变为原来的4/3=1.3333倍.
下面给出Base64编码的java实现
import java.util.Base64;import static java.lang.Math.*;class BitStream { byte[] b; // 需要补上几个字节,1个或者2个 int add; // 长度,编码之后包含多少个有效字符 int length; public BitStream(byte[] b) { this.b = b; length = (int) ceil(b.length / 3.0 * 4); add = (3 - b.length % 3) % 3; } // 获取第x个bit,其中byte的最高位为第一个bit,次高位为第二个bit...也就是说此流为大头序 int getBit(int x) { if (x >= b.length * 8) return 0; return (b[x / 8] & (1 << (7 - x % 8))) == 0 ? 0 : 1; } // 获取第x个字符,其中6x+0为最高位,6x+1为次高位...也就是此流为大头序 int get(int x) { int ans = 0; for (int i = 0; i < 6; i++) { ans = ans << 1 | getBit(x * 6 + i); } return ans; }}public class Base64Test { static String encode(byte[] b) { // 首先构造字符映射 String map = ""; for (char c = ‘A‘; c <= ‘Z‘; c++) { map += c; } for (char c = ‘a‘; c <= ‘z‘; c++) { map += c; } for (char c = ‘0‘; c <= ‘9‘; c++) { map += c; } map += "+/"; String ans = ""; BitStream cin = new BitStream(b); for (int i = 0; i < cin.length; i++) { ans += map.charAt(cin.get(i)); } // 添加了几个字符就add几个字符 ans += "==".substring(0, cin.add); return ans; } public static void main(String[] args) { byte[] bytes = "魏印福ad".getBytes(); String s = Base64.getEncoder().encodeToString(bytes); System.out.println(s); System.out.println(encode(bytes)); }}
Base64编码
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。