当前位置: 首页 > news >正文

鸿蒙ArkTs/c++/RepalcePioneer/base64.us之Base64编码解码的是非

狗血现象:

同一字符串原文使用

1、RepalcePioneer(一款Windows平台的字符串工具)

2、鸿蒙ArkTs自带base64编码方法

3、https://base64.us(一款在线base64工具)

来编码,得到编码串不一样,后二者是一致的。(未测试用c++写的base64编码。)

猜测base64编码可能有不同的“标准”?

相比解码的狗血度,上边的编码现象还不算什么:

上述1,和2或3,得到的两个不同的编码串,使用base64.us解码,居然得到相同的正确原文。

使用c++的base64解码(网上的一段代码,如下)上述不同的编码,也能得到相同的正确原文。

也就是说这两个方法在解码时,能正确处理不同编码工具(“标准”?)得到的不同编码串。

而用ArkTs的自带的解码方法,则可能得到不同的原文。

注意,上边说的是可能,即ArkTs有时能正确解码RepalcePioneer编码,有时不能。这是最狗血的地方。一个经验是:原文最后有一个单独的换行,其后可能有一些字符或没有,则ArkTs解码结果是:从这个换行起所有内容丢失。如果不是这样,则解码正确。

std::string base64_decode(const std::string &encoded) {
    static const std::string base64_chars =
             "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
             "abcdefghijklmnopqrstuvwxyz"
             "0123456789+/";
 
    std::string ret;
    int val = 0, valb = -8;
    for (unsigned char c : encoded) {
        if (base64_chars.find(c) == std::string::npos) break; // 非法字符
        val = (val << 6) + base64_chars.find(c);
        valb += 6;
        if (valb >= 0) {
            ret.push_back(char((val >> valb) & 0xFF));
            valb -= 8;
        }
    }
    return ret;
}

不了解为何存在不同的base64编码“标准”,以至于得到的编码串都大不相同。

更不理解为何这种不同的编码串,cpp解码或base64.us解码,能得到相同的正确原文。

我的实践是在鸿蒙NDK侧读取被ReplacePioneer编码的文件内容,然后在ArkTs侧解码,发现上述有时正确、有时错误(内容缺失)的现象。所以被迫在NDK侧用上述cpp方法解码,过渡一下,再把解码后的原文传回ArkTs侧,ArkTs侧不再参与base64解码。

相关文章:

  • 基于Spring Boot的高校普法系统的设计与实现(LW+源码+讲解)
  • 一文详解QT环境搭建:ubuntu20.4安装配置Qt5
  • 2025人工智能与计算机网络技术国际学术会议(ICAICN 2025)
  • 【商城实战(91)】安全审计与日志管理:为电商平台筑牢安全防线
  • 再谈XSS跨站攻击
  • Next.js 中间件鉴权绕过漏洞 (CVE-2025-29927) 复现利用与原理分析
  • 可视化图解算法:删除有序(排序)链表中重复的元素-II
  • Android Gradle 插件问题:The option ‘android.useDeprecatedNdk‘ is deprecated.
  • Docker技术系列文章,第六篇——使用 Docker 部署常见应用
  • DeepSeek-R1 模型现已在亚马逊云科技上推出
  • mac 下配置flutter 总是失败,请参考文章重新配置flutter 环境MacOS Flutter环境配置和安装
  • 【qt】文件类(QFile)
  • unity中Xcharts图表鼠标悬浮表现异常
  • idea中如何使用git
  • Redis为什么快?
  • 人工智能赋能美妆零售数字化转型:基于开源AI大模型的S2B2C商城系统构建
  • Ruby 简介
  • Docker Compose 基础知识
  • Linux云计算SRE-第二十一周
  • Java课程设计(双人对战游戏)持续更新......
  • 泽连斯基拒绝普京72小时停火提议,坚持应尽快实现30天停火
  • 出现这几个症状,说明你真的老了
  • 校方就退60件演出服道歉:承诺回收服装承担相关费用,已达成和解
  • 胖东来回应“浙江‘胖都来’卖场开业”:已取证并邮寄律师函
  • 国内锂矿“双雄”开局业绩PK:从巨亏中崛起,或深陷泥淖谋求多元转型
  • 航海王亚洲巡展、工厂店直销……上海多区推出“五五购物节”活动