#include #include #define CODE_LENGTH 8 typedef unsigned char u8; typedef unsigned short int u16; typedef unsigned long u32; typedef unsigned long long int u64; typedef signed char s8; typedef signed short int s16; typedef signed long s32; u32 table[0x100]; //========================================================================== // //========================================================================== void _Crc32Init( void ) { u32 poly = 0xedba6320; // DS‚̂Ƃ« 0xedb88320; u32 crc; for( u32 i = 0; i < 0x100; i++ ) { crc = i; for( u32 j = 8; j > 0; j-- ) { if( crc & 1 ) { crc = (crc>>1)^poly; } else { crc >>= 1; } } table[i] = crc; } } //========================================================================== // //========================================================================== u32 _CalcCrc32( const u8 *src, u32 len ) { u32 crc = 0xffffffff; while( len ) { crc = ((crc>>8)&0xffffffff)^table[(crc^(*src))&0xff]; src++; len--; } return crc; } //========================================================================== // //========================================================================== u32 _CalcMasterkey( const u8 *src ) { u32 key; _Crc32Init(); //key = ((_CalcCrc32( src, CODE_LENGTH )^0xaaaa)+5313)%100000; key = ((_CalcCrc32( src, CODE_LENGTH )^0xaaaa)+5719)%100000; return key; } //========================================================================== // //========================================================================== int main( int argc, char *argv[] ) { u32 masterKey; if ( ( argc != 2 ) || ( argv[1] == NULL ) ) { printf( "usage: MakeMasterKeyForCtr [date+code]\n" ); printf( "\n" ); printf( "example: date = Sep 8. code = 1234\n" ); printf( " MakeMasterKeyForCtr 09081234\n" ); return 1; } masterKey = _CalcMasterkey( (const u8*)argv[1] ); printf( "Master Key = %05d\n", masterKey ); return 0; }