RPC-GWT 序列化/java.util.Date 编码

2023-12-25

我正在创建一个序列化 GWT 请求的脚本,但在编码日期值以符合 RPC-GWT 标准时遇到问题。通过查看 HTTP 日志,我注意到日期值被转换为一些 7 个字符的字符串,但我无法识别这些模式使用的算法。

有谁知道使用哪种算法来加密这些日期值?


这些日期值被序列化为长值 => 自纪元(1970 年 1 月 1 日)以来的毫秒数,然后以打包形式序列化为 base64,成为较短的字符串。这里看一下:

/**
   * Parse a string containing a base-64 encoded version of a long value.
   *
   * Keep this synchronized with the version in Base64Utils.
   */
  static long longFromBase64(String value) {
    int pos = 0;
    long longVal = base64Value(value.charAt(pos++));
    int len = value.length();
    while (pos < len) {
      longVal <<= 6;
      longVal |= base64Value(value.charAt(pos++));
    }
    return longVal;
  }
  /**
   * Return an optionally single-quoted string containing a base-64 encoded
   * version of the given long value.
   *
   * Keep this synchronized with the version in Base64Utils.
   */
  static String longToBase64(long value) {
    // Convert to ints early to avoid need for long ops
    int low = (int) (value & 0xffffffff);
    int high = (int) (value >> 32);
    StringBuilder sb = new StringBuilder();
    boolean haveNonZero = base64Append(sb, (high >> 28) & 0xf, false);
    haveNonZero = base64Append(sb, (high >> 22) & 0x3f, haveNonZero);
    haveNonZero = base64Append(sb, (high >> 16) & 0x3f, haveNonZero);
    haveNonZero = base64Append(sb, (high >> 10) & 0x3f, haveNonZero);
    haveNonZero = base64Append(sb, (high >> 4) & 0x3f, haveNonZero);
    int v = ((high & 0xf) << 2) | ((low >> 30) & 0x3);
    haveNonZero = base64Append(sb, v, haveNonZero);
    haveNonZero = base64Append(sb, (low >> 24) & 0x3f, haveNonZero);
    haveNonZero = base64Append(sb, (low >> 18) & 0x3f, haveNonZero);
    haveNonZero = base64Append(sb, (low >> 12) & 0x3f, haveNonZero);
    base64Append(sb, (low >> 6) & 0x3f, haveNonZero);
    base64Append(sb, low & 0x3f, true);
    return sb.toString();
  }
  private static boolean base64Append(StringBuilder sb, int digit, boolean haveNonZero) {
    if (digit > 0) {
      haveNonZero = true;
    }
    if (haveNonZero) {
      int c;
      if (digit < 26) {
        c = 'A' + digit;
      } else if (digit < 52) {
        c = 'a' + digit - 26;
      } else if (digit < 62) {
        c = '0' + digit - 52;
      } else if (digit == 62) {
        c = '$';
      } else {
        c = '_';
      }
      sb.append((char) c);
    }
    return haveNonZero;
  }
  // Assume digit is one of [A-Za-z0-9$_]
  private static int base64Value(char digit) {
    if (digit >= 'A' && digit <= 'Z') {
      return digit - 'A';
    }
    // No need to check digit <= 'z'
    if (digit >= 'a') {
      return digit - 'a' + 26;
    }
    if (digit >= '0' && digit <= '9') {
      return digit - '0' + 52;
    }
    if (digit == '$') {
      return 62;
    }
    // digit == '_'
    return 63;

 }

我在 PHP 的指导下自己做了科林·阿尔沃斯 https://stackoverflow.com/users/860630/colin-alworth

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

RPC-GWT 序列化/java.util.Date 编码 的相关文章

随机推荐

  • 从多个远程Windows服务器获取磁盘空间信息

    我正在尝试制作一种工具 可以登录多个远程 Windows 服务器并获取其驱动器详细信息并将其显示在一个窗口下 我希望在远程服务器中执行的可能命令是wmic logicaldisk get size freespace caption 我打算
  • matplotlib 文本未剪切

    绘制文本时matplotlib with text 然后交互平移图像 生成的绘制文本不会剪切到数据窗口 这与使用绘制数据或绘制文本的方式相反annotate 有效 并且没有直观意义text 使用数据窗口坐标 import matplotli
  • 当 CWD 更改时,如何在 Python 模块中使用相对路径?

    我有一个 Python 模块 它使用模块目录的子目录中的一些资源 在搜索堆栈溢出并找到相关答案后 我设法使用类似的方法将模块定向到资源 import os os path join os path dirname file fonts my
  • 将结构传递到接口字段中是否会分配?

    我有一个像这样的结构 struct MyStructure IFoo 和这样的方法 public BarThisFoo IFoo a 我的问题是将结构传递到该方法中是否会 装箱 结构 从而导致垃圾分配 附录 在有人说之前 垃圾收集在这个应用
  • TwinCAT3 基于 Jenkins 构建

    是否可以在 Jenkins 上构建 TwinCAT3 解决方案 我已经用 msbuild 和 devenv com 尝试过了 msbuild MSBuild 不支持 tspproj devenv com tspproj 找不到该项目类型所基
  • 导入错误:没有名为 的模块

    我正在尝试通过 Python 学习编程 所以如果这是一个简单得荒谬的问题 我提前道歉 我试图简化我复杂的目录结构并利用Python的一些代码重用功能 我遇到了对我来说莫名其妙的问题ImportError错误 在过去的几个小时里 我一直在阅读
  • 带参数的回调函数ReactJS

    使用 ReactJS 并难以理解如何使用callback functions使用 ReactJS 我有一个名为的父组件TodoFormComponent 它初始化我的待办事项列表 我已经创建了一个回调函数TodoItemsComonent
  • 跨 DLL 调用 CoInitialize/CoUninitialize 的合适位置是什么?

    我正在实现一个 DLL 其中包含共享 ADO 连接 https stackoverflow com questions 9434762 pass adoconnection from vba to delphi通过使用ConnectionO
  • 根据 GPS 坐标记录计算圈数

    我有一个包含大量点的 GPX 文件 按时间排序的经度和纬度 如何计算我的点集包含多少圈 GPS 在赛道比赛期间被记录 圈数是车辆通过赛道起点 终点的次数 假设轨道足够小 我们可以假设这些点位于一个平面上 例如 我们可以忽略地球的曲率 在这种
  • Scala 反序列化:找不到类

    我试图理解尝试序列化 反序列化一个非常简单的数据结构时发生的以下问题 case class SimpleClass i Int object SerializationDebug def main args Array String val
  • 如何减少 ScalaCheck 生成的测试用例数量?

    我正在尝试解决两个 ScalaCheck specs2 问题 有什么方法可以改变 ScalaCheck 生成的案例数量吗 如何生成包含一些 Unicode 字符的字符串 例如 我想生成大约 10 个包含字母数字和 Unicode 字符的随机
  • 为初学者建议使用 json 的 ASP.NET MVC 教程 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我已经开始学习 json 以在 asp net mvc 中开发高端 Web 应用程序 请建议一些教程或链接来理解它 以下内容应该会有所帮助
  • CGAL:2D 约束 Delaunay 三角剖分 - 将信息添加到约束

    在将点添加到三角器对象之前 可以将信息 如整数 附加到点上 我这样做是因为一方面我需要一个稍后使用的 int flag 来定义我的纹理坐标 另一方面我需要一个索引 以便我可以创建一个索引的 VBO http doc cgal org lat
  • 每次更改代码后都会出现 org.jboss.weld.exceptions.IllegalStateException: WELD-000227

    我正在使用 NetBeans 和 Glassfish 4 1 1 开发一个 Web 应用程序 我使用 JSF 和 CDI 来管理 Facelets 的支持 bean 由于在更改代码中的任何内容后不久 在通过浏览器 成功 部署和运行应用程序后
  • PhpStorm Xdebug:等待使用 ide key 的传入连接

    我正在运行 PHP 7 0 和 PhpStorm 2016 1 我安装了 x debug 这是我的配置 当从 PhpStorm 运行调试时 调试器选项卡显示以下错误消息 等待 ide 键 13136 的传入连接 ide 密钥每次都不同 请帮
  • MdSidenavLayout 内的粘性 MdToolbar

    我有一个 Angular 2 Material 应用程序 它使用
  • 如何有条件地设置属性名称

    我试图根据数据中的一列动态设置属性名称 但它不起作用 将路径箭头属性名称设置为marker end or marker start基于isReverse数据中的列 我创建了一个函数并在 attr 函数但它抛出脚本错误 这个要求基本上是根据i
  • 方法什么时候可以被 CLR 内联?

    我在应用程序中观察到很多 堆栈内省 代码 这些代码通常隐式依赖于它们的包含方法not被内联以确保其正确性 此类方法通常涉及调用 MethodBase GetCurrentMethod Assembly GetCallingAssembly
  • 使用 MATLAB 从 Matrix 中查找正值的数量 [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我有一个6x6双矩阵A 1 1 2 1 2 2 1 3 1 1 2 1 3 5 1 1 3 3 4 5 2 2 1 3 4 1 3 3 2
  • RPC-GWT 序列化/java.util.Date 编码

    我正在创建一个序列化 GWT 请求的脚本 但在编码日期值以符合 RPC GWT 标准时遇到问题 通过查看 HTTP 日志 我注意到日期值被转换为一些 7 个字符的字符串 但我无法识别这些模式使用的算法 有谁知道使用哪种算法来加密这些日期值