You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Kotlin中实现encryptBase64获密文或在Rhino中运行加密代码?

JS加密逻辑适配Kotlin/Java环境的可行方案

修复Rhino执行时的"window未定义"问题

Rhino是无浏览器环境的JS引擎,默认没有window这类浏览器全局对象,得手动模拟加密代码依赖的属性:

  • 如果加密代码用到window.btoa/atob,先执行这段模拟代码:
    var window = {};
    // 用Java的Base64工具实现btoa
    window.btoa = function(str) {
      return java.util.Base64.getEncoder().encodeToString(str.getBytes('UTF-8'));
    };
    // 实现atob
    window.atob = function(str) {
      return new String(java.util.Base64.getDecoder().decode(str), 'UTF-8');
    };
    
  • 把这段代码放在你的加密逻辑前面执行,再调用加密函数就能解决报错。

正确实现Kotlin版encryptBase64函数

自定义的encryptBase64一般不是单纯Base64编码,肯定有额外处理步骤,得精准复刻JS逻辑:

  1. 拆解JS步骤:先把JS加密代码拆成原子操作——比如是否先拼接固定字符串、字符编码转换、字节异或、哈希处理,再做Base64。
  2. 对齐细节差异:
    • JS字符串默认是UTF-16编码,Kotlin默认UTF-8,要明确指定编码一致;
    • JS的Uint8Array和Kotlin的ByteArray要对应转换,注意字节顺序;
  3. 逐步骤复刻:比如JS里有input.split('').reverse().join(''),Kotlin里就写input.reversed(),确保每一步输出和JS一致。
  • 举个简单示例(假设JS逻辑是"输入+盐→UTF-8编码→Base64"):
    import java.util.Base64
    
    fun encryptBase64(input: String): String {
      val salt = "从JS代码里提取的盐值"
      val combinedStr = input + salt
      val byteArray = combinedStr.toByteArray(Charsets.UTF_8)
      return Base64.getEncoder().encodeToString(byteArray)
    }
    
  • 如果JS用了CryptoJS这类库,直接在Kotlin里用BouncyCastle等Java加密库实现相同算法就行。

调试小技巧

  • 把JS代码在浏览器控制台跑一遍,逐步骤输出中间结果(比如处理后的字符串、字节数组);
  • 在Kotlin代码里对应步骤也打日志,对比每一步的输出,就能快速找到哪里不一致。

内容的提问来源于stack exchange,提问作者luckcc00

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 03:13:31