吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 854|回复: 12
收起左侧

[求助] Android的Base64方法,传的flag11情况下,如何写JDK代码,能使其生成结果一致?

  [复制链接]
ilovecomputer66 发表于 2022-7-31 11:19
首先请大佬们看下,网上这个文章是不是写的非常不负责任?完全不提安卓的Base64.encodeToString(byte[] byteArray, int flag) 有flag这个参数,拿默认参数,就以偏概全得出他所谓的结论
https://blog.csdn.net/wgw335363240/article/details/120219475


言归正传,
我看到安卓Base64中源码这样

public class Base64 {
    public static final int CRLF = 4;
    public static final int DEFAULT = 0;
    public static final int NO_CLOSE = 16;
    public static final int NO_PADDING = 1;
    public static final int NO_WRAP = 2;
    public static final int URL_SAFE = 8;

然后我看到别人写的,有直接flag传11的
根据以往我编程经验, flag一般可以拿多个 进行  或( | ) 运算
这个11,我认为是 1 | 2 | 8 他三个或的结果正好是 11所以,应该是 NO_PADDING | NO_WRAP | URL_SAFE ,同时设置了这三个参数

但我看JDK 的Base64中没有这个参数属性。那么我该怎么让JDK的 去 和 安卓的结果一致呢?
同样一个String json ="{\"name\":\"张三\",\"age\":15,\"province\":\"北京市\"}";安卓执行结果(flag11)是:eyJuYW1lIjoi5byg5LiJIiwiYWdlIjoxNSwicHJvdmluY2UiOiLljJfkuqzluIIifQJDK是:eyJuYW1lIjoi5byg5LiJIiwiYWdlIjoxNSwicHJvdmluY2UiOiLljJfkuqzluIIifQ==
换其他字符串,每次结果并不是都多出2个==,可能1个,等等不同情况(请不要灌水回复,去掉最后的==或=就对。因为base64本来自己最后就可能最后为=)

免费评分

参与人数 1吾爱币 +1 收起 理由
binq200108 + 1 我很赞同!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

三滑稽甲苯 发表于 2022-7-31 11:26
直接但不优雅的办法就是截取字符串把后面的=删掉
 楼主| ilovecomputer66 发表于 2022-7-31 11:30
三滑稽甲苯 发表于 2022-7-31 11:26
直接但不优雅的办法就是截取字符串把后面的=删掉

我都说了。这样做是错的啊。人家本来最后也能就是=,然后被安卓的多加了==。你咋知道要去掉几个=呢?去多了不就错了
三滑稽甲苯 发表于 2022-7-31 11:31
ilovecomputer66 发表于 2022-7-31 11:30
我都说了。这样做是错的啊

加个计算=的个数就好了,没有=就跳过,base64的=作用是补全4位
 楼主| ilovecomputer66 发表于 2022-7-31 11:32
三滑稽甲苯 发表于 2022-7-31 11:31
加个计算=的个数就好了,base64的=作用是补全4位

兄弟一个是,base64中,最后结果字符串,一定是4的倍数,然后最后不足4位,才补的=是这个意思么
 楼主| ilovecomputer66 发表于 2022-7-31 11:36
ilovecomputer66 发表于 2022-7-31 11:32
兄弟一个是,base64中,最后结果字符串,一定是4的倍数,然后最后不足4位,才补的=是这个意思么

应该不是我刚才理解的这样哎。测了几个例子,有的符合,有的不符合

还请 三滑稽甲苯 兄弟指点了
 楼主| ilovecomputer66 发表于 2022-7-31 11:47
三滑稽甲苯 发表于 2022-7-31 11:31
加个计算=的个数就好了,没有=就跳过,base64的=作用是补全4位

我好像找到办法了

String result = Base64.getEncoder().withoutPadding().encodeToString(byteArray);

应该是这样设置JDK也进行 np padding。就一样了
三滑稽甲苯 发表于 2022-7-31 11:49
ilovecomputer66 发表于 2022-7-31 11:36
应该不是我刚才理解的这样哎。测了几个例子,有的符合,有的不符合

还请 三滑稽甲苯 兄弟指点了

百度百科的解释

如果最后剩下两个输入数据,在编码结果后加1个“=”;如果最后剩下一个输入数据,编码结果后加2个“=”;如果没有剩下任何数据,就什么都不要加,这样才可以保证资料还原的正确性。

简而言之就是不足的补全,具体是几位我也忘了

 楼主| ilovecomputer66 发表于 2022-7-31 11:54
三滑稽甲苯 发表于 2022-7-31 11:49
[md]看[百度百科的解释](https://baike.baidu.com/item/BASE64/8545775)
> 如果最后剩下两个输入数据, ...

嗯嗯,我上面找到JDK设置的办法了
侃遍天下无二人 发表于 2022-7-31 13:28
先了解了解 NO_PADDING | NO_WRAP 都是干啥的,不用百度,直接看IDEA里的代码提示就行
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止回复与主题无关非技术内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-5-8 13:42

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表