日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

仿射加密简述和Win32版本实现

發(fā)布時(shí)間:2025/4/14 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 仿射加密简述和Win32版本实现 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

仿射加密是一種相對簡單的加密,可以幫助理解一些加密算法的原理;

單碼加密法的另一種形式稱為仿射加密法(affine cipher)。
在仿射加密法中,字母表的字母被賦予一個(gè)數(shù)字,例如a=0,b=1,c=2…z=25。
仿射加密法的密鑰為0-25直接的數(shù)字對。

仿射變換的加密解密分別是:
c = Ea,b(m) ?≡ a, + b(mod 26)
m = Da,b(c) ≡ a^-1(c - b)(mod 26)
其中,a,b是密鑰,為滿足0≤a,b≤25和gcd(a,26)等于1的整數(shù)。
其中g(shù)cd(a,26)表示a和26的最大公因子,gcd(a,26)=1表示a和26是互素的,a^-1表示a的逆元,即a^-1*a ≡ 1mod26。

已知一個(gè)正確的明文按仿射加密后的結(jié)果如下;
sorcery --> welcylk

#include <windows.h> #include <string> #include "resource.h"using namespace std;LRESULT CALLBACK WindowProcedure (HWND, UINT, WPARAM, LPARAM); int FsJiami(char s[]); int FsJiemi(char s[]);HINSTANCE hInst; TCHAR szClassName[] = TEXT("fshDemo");int WINAPI WinMain (HINSTANCE hThisInstance,HINSTANCE hPrevInstance,LPSTR lpszArgument,int nFunsterStil) {HWND hwnd;MSG messages;WNDCLASSEX wincl;hInst = hThisInstance;wincl.hInstance = hThisInstance;wincl.lpszClassName = szClassName;wincl.lpfnWndProc = WindowProcedure;wincl.style = CS_DBLCLKS;wincl.cbSize = sizeof (WNDCLASSEX);wincl.hIcon = LoadIcon (NULL, IDI_APPLICATION);wincl.hIconSm = LoadIcon (NULL, IDI_APPLICATION);wincl.hCursor = LoadCursor (NULL, IDC_ARROW);wincl.lpszMenuName = MAKEINTRESOURCE (IDC_FSHDEMO);wincl.cbClsExtra = 0;wincl.cbWndExtra = 0;wincl.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);if (!RegisterClassEx (&wincl))return 0;hwnd = CreateWindowEx (0,szClassName,TEXT("仿射加密 Demo"),WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,CW_USEDEFAULT,300,300,HWND_DESKTOP,NULL,hThisInstance,NULL);ShowWindow (hwnd, nFunsterStil);while (GetMessage (&messages, NULL, 0, 0)){TranslateMessage(&messages);DispatchMessage(&messages);}return messages.wParam; }LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) {PAINTSTRUCT ps;HDC hdc;RECT rt; char szBuffer[100]; char s[]="sorcery";int i;int row;switch (message){case WM_COMMAND:switch (LOWORD(wParam)){case IDM_fsh: hdc=GetDC(hwnd);FsJiami(s);TextOut(hdc,10,10,"加密后為: ",10);row=0;for(i=0;i<7;i++){wsprintf(szBuffer, "%c",s[i]);TextOut(hdc,10,35+row*25,szBuffer,1);row=row+1;if((i+1)%7==0){break;}}FsJiemi(s);TextOut(hdc,100,10,"解密后為: ",10);row=0;for(i=0;i<7;i++){wsprintf(szBuffer, "%c",s[i]);TextOut(hdc,100,35+row*25,szBuffer,1);row=row+1;if((i+1)%7==0){break;}} break;case IDM_ABOUT:MessageBox (hwnd, TEXT ("fshDemo v1.0\nCopyright (C) 2020\n by bo"),TEXT ("fshDemo"), MB_OK | MB_ICONINFORMATION);break;case IDM_EXIT:DestroyWindow(hwnd);break;default:return DefWindowProc(hwnd, message, wParam, lParam); }break;case WM_CREATE:break;case WM_PAINT:hdc = BeginPaint(hwnd, &ps); GetClientRect(hwnd, &rt); EndPaint(hwnd, &ps);break;case WM_DESTROY:PostQuitMessage (0);break;default:return DefWindowProc (hwnd, message, wParam, lParam);}return 0; }int FsJiami(char s[]) {int i=0;int a[99];char *p=s;while(*p!='\0'){a[i]=s[i]-'a'; // 字符轉(zhuǎn)換為數(shù)字a[i]=(11*a[i]+6)%26;// 仿射加密函數(shù)s[i]=a[i]+'a'; // 數(shù)字轉(zhuǎn)換為字符i++;p++;}return 1; }int FsJiemi(char s[]) {int i=0;int a[99];char *p=s;while(*p!='\0'){a[i]=s[i]-'a'; // 字符轉(zhuǎn)換為數(shù)字a[i]=(19*a[i]+16)%26;// 仿射解密函數(shù)s[i]=a[i]+'a'; // 數(shù)字轉(zhuǎn)換為字符i++;p++;}return 1; }

運(yùn)行;?

?

工程;

?

資源和頭文件;

#include "resource.h" #include <windows.h>/ // // Menu //IDC_FSHDEMO MENU BEGINPOPUP "&File"BEGINMENUITEM "仿射加密Demo", IDM_fshMENUITEM "E&xit", IDM_EXITENDPOPUP "&Help"BEGINMENUITEM "&About ...", IDM_ABOUTEND END #define IDM_EXIT 10001 #define IDM_ABOUT 10002#define IDC_FSHDEMO 10101 #define IDD_ABOUTBOX 10102 #define IDM_fsh 40001

?

總結(jié)

以上是生活随笔為你收集整理的仿射加密简述和Win32版本实现的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。