记录一下直接定位到关键 密码算法
int main(void) { char a[] = "000000"; int num = 6; for (size_t i = 1; i < 6; i++) { num+=(2304)*i; } num -=666; //33900 // 33900=(a*6+b) // 3 0 3 0 -9 00 // 30 -3 // 3 3 // 330 9 // 3390 // }
账号算出的 阶乘值就是 密码
密码算法 就是 取10的摸 -29a
算法很简单 直接还原了 用户名长度大于6
int main(void) { char username[] = "000000"; //00033900 //11580823 int key = 0; int nTemp = 0; int num = 0; //求阶乘 num = ((int)username[4]) % 7 + 2; nTemp = num; for (int i = 1; i < nTemp; i++) { num *= i; }nTemp = num; int result = 0; //求用户名的ASCII和乘以阶乘 for (int i = 0; i < strlen(username); i++) { result += nTemp * username[i]; } //取出正确的密码 key = result - 0x7A69; printf("%d\n", key); }
ok代码
int main(void) { char key[20] = { 0 }; char username[20] = { 0 }; printf("请输入注册码,长度必须在六位以上:"); //输入密码 scanf_s("%s", key, 20); //检查长度 if (strlen(key) <= 5) { printf("密码长度不满足 请重新输入"); return 0; } for (int i = strlen(key) - 1; i != -1; i--) { username[i] = (key[i] * key[i] * (i + 1)) % 0x19 + 0x41; } printf("%s", username); }