欢迎来到 嗅灵易学

零基础也能上手的脚本技术课,一对一答疑带你入门

不要再争了。注册机如下: (1千字)

不要再争了。注册机如下: (1千字)

看看就知道算法是怎么样的了。第一个for循环可以优化,懒得做了。
                int  k, len;
                unsigned char name[7];
                unsigned long b[6] = { 0xAD, 0xC0, 0x90, 0x9B, 0x26, 0xC3};
                unsigned long a[6] = { 0x8C, 0x5E, 0x1A, 0x35, 0x4D, 0x96};
                unsigned long c[6] = { 0xD1, 0xDB, 0x24, 0xBB, 0xC5, 0x82};
                unsigned long serial[7], tmp;
                char buf[64];
                len = GetDlgItemTextA(hDlg, IDC_USERNAME, (char *)name, 7);
                if ( (len < 4) || (len > 6))
                {
                    SetDlgItemTextA(hDlg, IDC_REGCODE, "There must be 4~6 chars in your name.");
                    return FALSE;
                }
               
                for (k = 0; k < len; k++)
                {
                    name[k] ^= (a[k] ^ b[k]);
                }
                //随机数
                serial[len] = GetTickCount( ) & 0xFF;
                for(k = len -1; k >=0; k--)
                {
                    c[k] ^= serial[k+1];
   
                    tmp = (unsigned long)name[k];
                    if (tmp > c[k])
                    {
                        serial[k] = c[k] + 0x00FF - tmp;
                    }
                    else
                    {
                        serial[k] = c[k] - tmp;
                    }
                }
                for(k =0; k <= len; k++)
                {
                      wsprintf(&buf[k*2], "%02lX", serial[k]);
                }
                SetDlgItemTextA(hDlg, IDC_REGCODE, buf);

注意:上传附件及图片大小不得大于30M。

⚠️ 版权声明:
本博客所有内容(含教程、源码、工具)仅供个人技术学习与研究交流使用,严禁商用、倒卖、二次分发及非法用途
未经作者书面授权,任何组织或个人不得转载、复制或用于其他平台,违者将追究相关责任。

0 0 0 举报
复制成功