注册码判断的提示信息,也用前面的custom_base64table 编码了。 "bmdeTH8Xb2unTHN5TSVhTQ" // no, wrong sn!!!! "bWzXZSB3b3JrTHRvTGRvTQ" // more work to do! "sWE9LCBjb3JXZWNwTHN5TQ" // yes, correct sn! "c24aZGzlc24n8CB3b3JrTQ" // sn doesn't work!
n100 = n*100; k = 2; for(i = 0; i < 10; i++) { k = (k + n100/k) >> 1; } root = k/10; return root; }
// 筛法256以内的小素数 #define NMAX 256 int prime_table(unsigned int n, unsigned int out[]) { char mark[NMAX+1] = {0}; //有没有遍历过 unsigned int prime[NMAX+1] = {0}; unsigned int primeSize; unsigned int rootn; unsigned int i; unsigned int j;
for (i = 2; i <= n; i++) { if (mark[i] == 1) // 已标记为合数 continue;
prime[primeSize] = i; primeSize++;
if (i >= rootn) continue; //终止条件
for (j = i * i; j <= n; j += i) { mark[j] = 1; } }
// copy the primes for(i = 0; i < primeSize; i++) { out[i] = prime[i]; }
return primeSize; }
// n=100 // key=79 // N = 3*5*7*11*13*17*19*23*29*31*37*41*43*47*53*59*61*67*71*73 = // 20364840299624512075310661735 // 41CD66ACC237B22681A18067 // exp = e=83 int check_sn(int n, unsigned int p79, unsigned char *sn, unsigned int len) { int i; unsigned int primes[100] = {0}; unsigned int primesize = 0; unsigned int e; unsigned int retn; mpi X, M, N; mpi P2;