sun.misc.BASE64Encoder加密jdk1.8中Base64解密报错分析
sun.misc.BASE64Encoder一行不能超过76字符,超过则添加回车换行符。
源码
public void encode(InputStream var1, OutputStream var2) throws IOException {
byte[] var5 = new byte[this.bytesPerLine()];
this.encodeBufferPrefix(var2);
while(true) {
int var4 = this.readFully(var1, var5);
if (var4 == 0) {
break;
}
this.encodeLinePrefix(var2, var4);
for(int var3 = 0; var3 < var4; var3 += this.bytesPerAtom()) {
if (var3 + this.bytesPerAtom() <= var4) {
this.encodeAtom(var2, var5, var3, this.bytesPerAtom());
} else {
this.encodeAtom(var2, var5, var3, var4 - var3);
}
}
if (var4 < this.bytesPerLine()) {
break;
}
this.encodeLineSuffix(var2);
}
//每次循环步长为3
protected int bytesPerAtom() {
return 3;
}
//判断需要换行值
protected int bytesPerLine() {
return 57;
}
//每次往var2中添加4个字节
this.encodeAtom
//println() 在Windows 回车换行符(\r\n),而Linux只有换行(\n),Mac只有回车(\r))
var2字节等于76(57/3*4)会添加回车换行符
如果我们使用是sun.misc.BASE64Decoder解密没有问题。
jdk1.8 Base64
使用方法
Base64.getDecoder().decode(str)
getEncoder()使用的是 RFC4648
public static Encoder getEncoder() {
return Encoder.RFC4648;
}
static final Encoder RFC4648 = new Encoder(false, null, -1, true);最大长度-1没有分隔符。
我们使用 Base64.getDecoder().decode(str)解密将会报错
private int decode0(byte[] src, int sp, int sl, byte[] dst) {
int[] base64 = isURL ? fromBase64URL : fromBase64;
int dp = 0;
int bits = 0;
int shiftto = 18; // pos of first byte of 4-byte atom
while (sp < sl) {
int b = src[sp++] & 0xff;
if ((b = base64[b]) < 0) {
if (b == -2) { // padding byte '='
// = shiftto==18 unnecessary padding
// x= shiftto==12 a dangling single x
// x to be handled together with non-padding case
// xx= shiftto==6&&sp==sl missing last =
// xx=y shiftto==6 last is not =
if (shiftto == 6 && (sp == sl || src[sp++] != '=') ||
shiftto == 18) {
throw new IllegalArgumentException(
"Input byte array has wrong 4-byte ending unit");
}
break;
}
if (isMIME) // skip if for rfc2045
continue;
else
throw new IllegalArgumentException(
"Illegal base64 character " +
Integer.toString(src[sp - 1], 16));
解密是会报错误
throw new IllegalArgumentException(
"Illegal base64 character " +
Integer.toString(src[sp - 1], 16));
错误提示如下:
java.lang.IllegalArgumentException: Illegal base64 character a
sun.misc.BASE64Encoder加密jdk1.8中Base64解密报错分析相关推荐
- sun.misc.BASE64Encoder详解
#(一).BASE64编码规则及JAVA中的使用 ##1.编码规则: Base64编码要求把3个8位字节(38=24)转化为4个6位的字节(46=24),之后在6位的前面补两个0,形成8位一个字节的形 ...
- sun.misc.BASE64Encoder在Eclipse中不能直接使用的原因和解决方案
1.为什么在Eclipse中不能直接使用sun.misc.BASE64Encoder和sun.misc.BASE64Decoder呢? 因为sun.misc.BASE64Encoder和sun.mis ...
- sun.misc.BASE64Encoder 不建议使用java.sun自带包中的内容
import sun.misc.BASE64Encoder; import sun.misc.BASE64Decoder; 在项目中,设计到64位编码的.有时开发会用到JDK中自带的BASE64工具. ...
- 项目中提示找不到sun.misc.BASE64Encoder
场景:使用JDK12时导入项目,结果报错,提示sun.misc.BASE64Encoder类找不到. 解决方案:把JDK12换成JDK8即可.
- IDEA解决sun.misc.BASE64Encoder找不到jar包的解决方法
sun.misc.BASE64Encoder 不建议使用java.sun自带包中的内容 import sun.misc.BASE64Encoder; import sun.misc.BASE64Dec ...
- 在Idea解决找不到sun.misc.BASE64Encoder及sun.misc.BASE64Decoder找不到包
在Idea解决找不到sun.misc.BASE64Encoder及sun.misc.BASE64Decoder找不到包的解决方法 报错原因: JDK从1.8升级到9.0.1后sun.misc.BASE ...
- sun.misc.BASE64Encoder找不到的解决方法
sun.misc.BASE64Encoder找不到的解决方法 参考文章: (1)sun.misc.BASE64Encoder找不到的解决方法 (2)https://www.cnblogs.com/si ...
- Navicat 远程连接docker容器中的mysql 报错1251 - Client does not support authentication protocol 解决办法
Navicat 远程连接docker容器中的mysql 报错1251 - Client does not support authentication protocol 解决办法 1).容器中登录my ...
- docker中安装nacos报错 com.alibaba.nacos.shaded.io.grpc.StatusRuntimeException: UNAVAILABLE: io exception
docker中安装nacos报错 com.alibaba.nacos.shaded.io.grpc.StatusRuntimeException: UNAVAILABLE: io exception ...
最新文章
- 乘风破浪的马里奥!这个AI带你一口气通29关,你猜连AI都过不去的是哪3关?
- apu和atom处理器两者的定位
- 1063. Set Similarity (25)
- 登录页面test记录
- brackets作为html编辑器,为前端而生丨编辑器 Brackets 及配置推荐
- leetcode - 统计封闭岛屿的数目
- [golang]如何看懂调用堆栈
- OpenSSL之X509证书用法
- 微信代扣踩坑日记(微信自动续费)
- 用人话说说文明和文化
- Android动画的使用——补间动画
- 龙之谷2服务器维护,龙之谷2今日上线!详细攻略带你玩转阿尔特里亚大陆
- 1024*1024像素的图片,文件大小多少?
- 运营公众号成功的三大要素
- 【121期】面试官:什么是熔断?什么是服务降级?
- 图片与文字排版-flex
- 移动端二三事【五】:陀螺仪(重力感应器)实现手机位置、加速度感应以及常见应用。
- java架构师年薪_Java架构师一般的薪资是多少?高不高?
- 【web课程设计】HTML+CSS仿QQ音乐网站
- 常微分方程组解稳定性的分析