php - 使用 PHP 将 6 个数组字节转换为 int64
问题描述
我正在将 javascript 脚本逆向工程为 PHP,并且有许多函数可以转换:
[224, 221, 199, 147, 195, 47] 的 6 个数组字节
并将其输出到 1632933900000 (这是时间戳,Int64)
您能帮我如何使用 PHP 将上述字节打包/解包为最终整数吗?
样品:
[224, 221, 199, 147, 195, 47] 得到 1632933900000
[224, 143, 228, 137, 198, 47] 得到 1633718700000
附加信息:
javascript 代码很长(它被混淆了)。我只是确定它被放置在 6 个字节内。
下一个更新...
它转到这个函数(this.buf 是数组字节):
function u() {
var e = new a(0, 0),
t = 0;
if (!(this.len - this.pos > 4)) {
for (; t < 3; ++t) {
if (this.pos >= this.len) throw s(this);
if (e.lo = (e.lo | (127 & this.buf[this.pos]) << 7 * t) >>> 0, this.buf[this.pos++] < 128) return e
}
return e.lo = (e.lo | (127 & this.buf[this.pos++]) << 7 * t) >>> 0, e
}
for (; t < 4; ++t)
if (e.lo = (e.lo | (127 & this.buf[this.pos]) << 7 * t) >>> 0, this.buf[this.pos++] < 128) return e;
if (e.lo = (e.lo | (127 & this.buf[this.pos]) << 28) >>> 0, e.hi = (e.hi | (127 & this.buf[this.pos]) >> 4) >>> 0, this.buf[this.pos++] < 128) return e;
if (t = 0, this.len - this.pos > 4) {
for (; t < 5; ++t)
if (e.hi = (e.hi | (127 & this.buf[this.pos]) << 7 * t + 3) >>> 0, this.buf[this.pos++] < 128) return e
} else
for (; t < 5; ++t) {
if (this.pos >= this.len) throw s(this);
if (e.hi = (e.hi | (127 & this.buf[this.pos]) << 7 * t + 3) >>> 0, this.buf[this.pos++] < 128) return e
}
throw Error("invalid varint encoding")
}
然后它有 [hi and low] 数字,这得到时间戳:
o.prototype.toNumber = function(e) {
if (!e && this.hi >>> 31) {
var t = 1 + ~this.lo >>> 0,
n = ~this.hi >>> 0;
return t || (n = n + 1 >>> 0), -(t + 4294967296 * n)
}
return this.lo + 4294967296 * this.hi
}
解决方案
224 221 199 147 195 47
是E0 DD C7 93 C3 2F
... 的十进制表示,它是247243140743983
十进制的。也许不是整个 dword 是时间戳...用于比较:01 7C 32 71 EE E0
或61 54 98 0C
. 人们已经可以通过第一个数字注意到这种方法有多远。
JS 中的那个数字可能是类型BigInt
:
BigInt("0x017C3271EEE0")
但BigInt("0xE0DDC793C32F")
还是给了247243140743983
。
推荐阅读
- python - 在 Python 中解决有理数线性规划问题
- python - 选择至少一列中的值为负数的行
- java - 仅在 out 文件夹和 gradle 运行中无法识别资源
- c# - 在asp netcore的剃须刀页面上设置谷歌分析的正确方法
- swift - 特征检测期间 iOS Vision API“computeBlinkFunction”中的错误和冻结
- javafx - 如何为 TextFieldTreeCell 设置图形
- junit5 - JUnit5 属性文件在测试运行期间导致不需要的日志记录
- ms-access - Access - 何时对表进行查询
- c# - 通过参数强制接口到属性
- sql - 标量变量必须在 SQL 变量中声明