• 标 题:请问各位高手这个程序能不能写注册器出来?还是要用穷举法来算注册码? (802字)
  • 作 者:foxtest
  • 时 间:2001-3-29 17:34:01
  • 链 接:http://bbs.pediy.com

ID=任意数字(如:12345678)
ZSHNUM=001110101001100001110110010101000011001000010000
BHD = ''
DO WHILE ID / 2 <> 0
BMOD = IIF(MOD(ID,2) = 0,'0','1')
BHD = BMOD + BHD
ID = INT(ID / 2)
ENDDO

If len('&bhd')<48
  BHD=replicate('0',48-len('&bhd'))+BHD
ENDIF

NBHD = ''

DO WHILE ZCH / 2 <> 0
BMOD = IIF(MOD(ZCH,2) = 0,'0','1')
NBHD = BMOD + NBHD
ZCH = INT(ZCH / 2)
ENDDO

If len('&nbhd')<48
  NBHD=replicate('0',48-len('&nbhd'))+NBHD
ENDIF

YHNUM = ''

FOR BI = 1 TO 20
IF SUBSTR(BHD,BI,1) = SUBSTR(NBHD,BI,1)
YHNUM = YHNUM + '0'
ELSE
YHNUM = YHNUM + '1'
ENDIF
ENDFOR

FOR BI = 21 TO 48
IF SUBSTR(BHD,BI,1) = SUBSTR(NBHD,BI,1)
YHNUM = YHNUM + '1'
ELSE
YHNUM = YHNUM + '0'
ENDIF
ENDFOR

IF YHNUM == ZSHNUM
OK!
ELSE
Error!

  • 标 题:这好象不是很复杂呀 (1千字)
  • 作 者:blowfish
  • 时 间:2001-3-29 17:43:50

下面这段是把ID转换成48-bit的二进制串
//----------------------------------------------------------
ID=任意数字(如:12345678)
BHD = ''
DO WHILE ID / 2 <> 0
BMOD = IIF(MOD(ID,2) = 0,'0','1')
BHD = BMOD + BHD
ID = INT(ID / 2)
ENDDO

If len('&bhd')<48
  BHD=replicate('0',48-len('&bhd'))+BHD
ENDIF
//-----------------------------------------------------------

下面这段和上面的类似,是把ZCH(注册号)转换成48-bit的二进制串

//-----------------------------------------------------------
NBHD = ''

DO WHILE ZCH / 2 <> 0
BMOD = IIF(MOD(ZCH,2) = 0,'0','1')
NBHD = BMOD + NBHD
ZCH = INT(ZCH / 2)
ENDDO

If len('&nbhd')<48
  NBHD=replicate('0',48-len('&nbhd'))+NBHD
ENDIF
//---------------------------------------------------------
下面这段是把ID的二进制串和ZCH的二进制串分成两段来逐位比较,每位比较的结果都记录在YHNUM中
//---------------------------------------------------------
YHNUM = ''

FOR BI = 1 TO 20
IF SUBSTR(BHD,BI,1) = SUBSTR(NBHD,BI,1)
YHNUM = YHNUM + '0'
ELSE
YHNUM = YHNUM + '1'
ENDIF
ENDFOR

FOR BI = 21 TO 48
IF SUBSTR(BHD,BI,1) = SUBSTR(NBHD,BI,1)
YHNUM = YHNUM + '1'
ELSE
YHNUM = YHNUM + '0'
ENDIF
ENDFOR
//------------------------------------------------------

将比较的结果YHNUM和常数串ZSHNUM进行比较
//------------------------------------------------------
ZSHNUM=001110101001100001110110010101000011001000010000
IF YHNUM == ZSHNUM
OK!
ELSE
Error!

  • 标 题:大概: (409字)
  • 作 者:1212
  • 时 间:2001-3-29 17:45:49

(1) 把ID转换成2进制数放到BHD中
(2) 把ZCH转换成2进制数放到NBHD中
(3) BHD的前20位如果和NBHD的对应位相同,YHNUM添加一个0,否则添加1
(4) BHD的21~48位如果和NBHD的对应位相同,YHNUM添加一个1,否则添加0

(3)相当于BHD前20位和NBHD进行异或
(4)相当于BHD21~48位和NBHD进行与或(对XOR取补)

也就是说如果ZCH已知,那么ID算法为:

1~20位:ZSHNUM ^ ZCH
21~48位:~(ZSHNUM ^ ZCH)

然后转换成10进制。

原文没给出ZCH。