關於ShowDep 4.0 beta 1的註冊碼判斷演算法求逆問題 (1千字)

看雪資料發表於2000-06-07

這個東西判斷註冊碼用的是兩個迭代,這兩個迭代用的是同樣的計算
公式,且前一個迭代的輸出作為後一個迭代的輸入。第一個是對
Name進行迭代,第二個則是對Serial進行迭代。迭代過程中要查一
個表。假定你輸入的註冊碼是“11223344”,則Serial[ ]={0x44,
0x33,0x22,0x11}。

迭代是針對3個長整數(a,b,c)來進行的,用a[k]、b[k]、c[k]分別表示第k輪迭代之前這3個長整數的值,
用a[k+1]、b[k+1]、c[k+1]分別表示第k輪迭代之後這3個長整數的值,
用Name[k]和Serial[k]分別表示你輸入的名字和註冊碼的第k個位元組的值,則有迭代公式:
1、a[k+1] = (a[k] >> 8) ^ Table[4 * ((a[k] & 0xFF) ^ Name[k])];
2、b[k+1] = ((a[k+1] & 0xFF) + b[k]) * 0x08088405 + 1;
3、c[k+1] = (c[k] >> 8) ^ Table[4 * ((c[k] & 0xFF) ^ (b[k+1] >> 24))];
迭代的初始條件為a[0]=0x12345678,b[0]=0x23456789,c[0]=0x34567890。

以上是針對Name進行迭代,之後還要對Serial進行迭代,將上面的Name[k]用Serial[k]代替即可。
對Name進行迭代後得到的三個長整數將作為對Serial進行迭代的初始值。

註冊碼正確的條件為:最終得到的第3個長整數為0,即c = 0。

誰能將這個演算法求逆? 這個也許是密碼學裡頭的某種演算法,不知誰懂這個?

相關文章