WeChall - Training - Checksums

Challenge

Checksums 不是文件 MD5/SHA 题,而是 GAN(gizmore article number)校验位题。页面提供 gan.frm.htm,其中泄露了校验算法。

Solution

gan.frm.htm 中的核心逻辑:

1
2
3
4
5
6
$poly = [1, 5, 13, 31, 131, 131, 137, 7, 43, 1];
$sum = 1;
for ($i = 0; $i < 8; $i++) {
$sum = $sum * $poly[$i] + $digit[$i];
}
$check = $sum % 10;

前 8 位是数据位,第 9 位必须等于上面计算出的 check

以默认值 12345678 为例:

1
2
3
4
5
6
poly = [1, 5, 13, 31, 131, 131, 137, 7, 43, 1]
digits = [1,2,3,4,5,6,7,8]
s = 1
for i, d in enumerate(digits):
s = s * poly[i] + d
print(s % 10) # => 3

所以合法 GAN 是 123456783,页面格式化显示为:

123-456-783