编码过程,在网上一篇文章大概是如下描述:
第一个字符通过右移2位获得第一个目标字符的Base64表位置,根据这个数值取到表上相应的字符,就是第一个目标字符。
然后将第一个字符左移4位加上第二个字符右移4位,即获得第二个目标字符。
再将第二个字符左移2位加上第三个字符右移6位,获得第三个目标字符。
最后取第三个字符的右6位即获得第四个目标字符。
在以上的每一个步骤之后,再把结果与 0x3F 进行 AND 位操作,就可以得到编码后的字符了。
这个过程不懂,请高人解释下,谢谢
关于java中BASE64解码算法
答案:2 悬赏:50
解决时间 2021-03-09 04:02
- 提问者网友:王者刀枪不入
- 2021-03-08 18:12
最佳答案
- 二级知识专家网友:陪我到地狱流浪
- 2021-03-08 18:17
让我们再来看一个实际的例子,加深印象!
转换前 10101101 10111010 01110110
转换后 00101011 00011011 00101001 00110110
十进制 43 27 41 54
对应码表中的值 r b p 2
将第一个字符右移2位得00101011, 得第一个目标字符00101011
将第一个字符左移4位得11010000,第二个字符右移4位的00001011相加得第二个目标字符11011011
将第二个字符左移2位得11101000,第三个字符右移6位的00000001相加的第三个目标字符11101001
第四个目标字符就是01110110
然后让各个目标字符与0x3F进行and位操作,让最高的两位为零。
转换前 10101101 10111010 01110110
转换后 00101011 00011011 00101001 00110110
十进制 43 27 41 54
对应码表中的值 r b p 2
将第一个字符右移2位得00101011, 得第一个目标字符00101011
将第一个字符左移4位得11010000,第二个字符右移4位的00001011相加得第二个目标字符11011011
将第二个字符左移2位得11101000,第三个字符右移6位的00000001相加的第三个目标字符11101001
第四个目标字符就是01110110
然后让各个目标字符与0x3F进行and位操作,让最高的两位为零。
全部回答
- 1楼网友:滚刀废物浮浪人
- 2021-03-08 18:33
import sun.misc.base64encoder;
import sun.misc.base64decoder;
// 将 s 进行 base64 编码
public static string getbase64(string s) {
if (s == null) return null;
return (new sun.misc.base64encoder()).encode( s.getbytes() );
}
// 将 base64 编码的字符串 s 进行解码
public static string getfrombase64(string s) {
if (s == null) return null;
base64decoder decoder = new base64decoder();
try {
byte[] b = decoder.decodebuffer(s);
return new string(b);
} catch (exception e) {
return null;
}
}
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯