📄 keygen.c
字号:
/*-------------------------------------------------------
/* 《加密与解密》 第6章 加密算法
/* SHA-256算法应用
/* (c) www.PEDIY.com by 段钢 2002.9
-------------------------------------------------------*/
#include <stdio.h>
#include <windows.h>
#include "resource.h"
#include "sha256.c"
/*-------------------------------------------------------------*/
/* 定义子程序与全局变量、常量 */
/*-------------------------------------------------------------*/
HINSTANCE hInst;
#define MAXINPUTLEN 100
/*-------------------------------------------------------------*/
/* 函数声明 */
/*-------------------------------------------------------------*/
BOOL CALLBACK MainDlg (HWND, UINT, WPARAM, LPARAM) ;
BOOL CALLBACK AboutDlgProc (HWND, UINT, WPARAM, LPARAM) ;
BOOL GenRegCode( HWND) ;
/*-------------------------------------------------------------*/
/* WinMain - 基于WIN32的程序的入口 */
/*-------------------------------------------------------------*/
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow)
{
hInst=hInstance;
DialogBoxParam(hInstance, MAKEINTRESOURCE(IDD_MAINDLG), NULL, (DLGPROC)MainDlg,0);
return 0;
}
/*-------------------------------------------------------------*/
/* AboutDlgProc - 关于窗口 */
/*-------------------------------------------------------------*/
BOOL CALLBACK AboutDlgProc (HWND hDlg, UINT message,
WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_COMMAND :
switch (LOWORD (wParam))
{
case IDOK :
case IDCANCEL :
EndDialog (hDlg, 0) ;
return TRUE ;
}
break ;
}
return FALSE ;
}
/*-------------------------------------------------------------*/
/* MainDlg - 主对话窗口 */
/*-------------------------------------------------------------*/
BOOL CALLBACK MainDlg(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_CLOSE:
EndDialog(hDlg,0);
break;
case WM_COMMAND:
switch (LOWORD(wParam))
{
case IDC_OK:
SetFocus (GetDlgItem(hDlg,IDC_TXT0));
GenRegCode(hDlg);
break;
case IDC_ABOUT :
case IDM_HELP_ABOUT :
DialogBox (hInst, MAKEINTRESOURCE (IDD_ABOUT), hDlg, AboutDlgProc) ;
break;
case IDC_EXIT:
PostQuitMessage(0);
}
break;
case WM_INITDIALOG:
SendMessage(hDlg,WM_SETICON,(WPARAM) 1,(LPARAM) LoadIconA(hInst,MAKEINTRESOURCE(IDI_ICON)));
SendDlgItemMessage(hDlg, IDC_TXT0, EM_LIMITTEXT, MAXINPUTLEN, 0); //初始化edit控件IDC_TXT0字符长度
break;
}
return 0;
}
/*-------------------------------------------------------------*/
/* GenRegCode - 注册算法主函数 */
/*-------------------------------------------------------------*/
BOOL GenRegCode( HWND hWnd)
{
unsigned char szName[MAXINPUTLEN] = {0};
unsigned char szSerial[MAXINPUTLEN] = {0};
long temp1,temp2;
int i;
sha_state c;
GetDlgItemText(hWnd, IDC_TXT0, szName, sizeof(szName)/sizeof(TCHAR)+1);
if (strlen(szName)<2)
{
SetDlgItemText(hWnd, IDC_TXT1, "至少输入2个字符...");
return FALSE;
}
temp2 = 0;
sha_init(&c); //创建
sha_process(&c,szName,strlen(szName)); //SHA-256
sha_done(&c,szSerial); //hash
for (i=0; i<strlen(szSerial); i++)
{
temp1 = szSerial[i];
temp1 *= i;
temp1 *= temp1;
temp1 += 0x50;
temp2 += temp1;
}
temp2 ^= 0x12345678;
wsprintf(szSerial,TEXT("%lu"), temp2);
SetDlgItemText(hWnd, IDC_TXT1, szSerial);
return TRUE;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -