我使用Backblaze备份计算机。您可以通过选择要还原的文件从备份中还原文件,然后将其打包为大型zip文件。当然,能够在不中断连接的情况下下载500GB的zip文件是非常罕见的,因此明智的开发人员会实现对HTTP Range标头的支持,以允许用户继续下载。

他们没有做到了。相反,它们有一个精品下载实用程序,它通过模拟POSTED HTML表单来指定请求的字节范围。该实用程序可以完成您期望普通下载管理器完成的所有工作,例如一次下载多个连接并恢复部分完成的下载,但是由于一些棘手的设计问题(例如打开一个完整的进程,而不是一个线程) ,对于每个40MB的数据块)在快速(> 100 Mbps)连接上效率很低。它也是Windows独有的。

我正在尝试在Node.js中编写一个开源替代品,以消除一些麻烦,但是我遇到了一个障碍:实用程序发送其POST请求的过程称为“ bzsanity”,它是帐户电子邮件地址上的16位校验和。不幸的是,我不知道算法是什么。也许我只是傻瓜,但我希望你们能帮助我。

以下是一些校验和值:


test@test.com :028a
Test@test.com:4152
test2@test.com:3d0f
测试:494c
aa:acf2
ab:aaad
ac :8e4d
ad:0436
“”“(空字符串):a93e
a:ce7f
b:1a1e
c:1540
d:6c57

如果您想要更多的测试向量,我可能可以提供。我尝试将字节添加到累加器和CRC-16的一些变体中,但这些方法不起作用。

评论

也许几年来已经太晚了,但是...您是否曾经在node.js中完成替换?我需要放下几个300-500GB的zip文件,即使使用千兆位互联网,下载速度也很慢。 (我使用的是aria2c 1线程,就像您所说的cos,没有HTTP Range标头。。我在Linux上,所以...无法在其中使用DL应用程序。)

@Mint我做到了,然后我迅速忘记了三年。感谢您确保我能及时了解,

传说!!!我几乎没有希望能听到一个功能完整的node.js应用程序的反馈!立即尝试一下,它确实可以工作,“(瞬时513.61 Mbps,总491.52 Mbps,预计到达时间:一个小时)”一个小时肯定比我得到的〜10h快。非常感谢您的分享。

#1 楼

出于示例目的,我将使用"test@test.com"。例如,"test@test.com"的ASCII字节为74 65 73 74 40 74 65 73 74 2E 63 6F 6D
从那些十六进制字节中减去小写字符串。使用正在运行的示例,这将产生"7465737440746573742e636f6d"
计算该字符串的SHA-1哈希。例如,SHA1("7465737440746573742e636f6d") = 90 A2 78 5A 31 39 E2 2A 3D F7 56 90 0A F3 79 87 A9 35 03 16
从那些十六进制字节中减去小写字符串。使用正在运行的示例,这将产生"90a2785a3139e22a3df756900af37987a9350316"
连接该字符串中的第2、4、6和8个字符以产生bzsanity值。使用正在运行的示例,这将是'0'+'2'+'8'+'a' = "028a"

为了好玩,这是Python中的一行代码段,用于计算bzsanity值:

import hashlib
"".join(map(lambda i: hashlib.sha1("".join(map(hex, map(ord, "test@test.com"))).replace("0x", "")).hexdigest()[i], [1, 3, 5, 7]))


评论


我很震惊,他可能不是人。

– Ta Thanh Dinh
16 Mar 9 '16 at 22:47

@MrNerdHair:我对客户端软件进行了反向工程。

–詹森·格夫纳(Jason Geffner)
16 Mar 9 '16 at 22:50

IDA Pro + OllyDbg。由于他们使用的是编译器,因此如果不进行动态分析,几乎不可能弄清楚这一点,所以请不要太用力了;)

–詹森·格夫纳(Jason Geffner)
16-3-9在22:55



@JasonGeffner的工作很棒,尽管IMO最好不要将此站点变成“对我不利”,而是提供有关如何解决反向困难的建议。

–维塔利·奥西波夫(Vitaly Osipov)
16年3月11日在20:25

@VitalyOsipov:我希望向人们表明,对于所有这些“通过查看示例输入和输出来确定校验和”的问题,几乎总是需要对代码本身进行反向工程。希望我指出人们今后的答案(和具体评论);)

–詹森·格夫纳(Jason Geffner)
16 Mar 11 '16 at 20:27

#2 楼

作为Backblaze的CTO和创始人,我编写了Backblaze客户端的原始源代码,上面的Jason Geffner是正确的。即:


对电子邮件地址进行十六进制编码(所有小写,电子邮件地址均不区分大小写)
使用sha1-结果应为40字节的人类可读的所有小写字符串
如果sha1字符的初始字符索引为“零”,则采用索引1、3、5和7的字符。

-BrianW