?? substitute.cpp
字號:
#include "stdafx.h"
#include "stdlib.h"
void m2c(BYTE m , BYTE &c , BYTE k)
{
c=(m+k)%256;
}
void c2m(BYTE m , BYTE &c , BYTE k)
{
c=(m+256-k)%256;
}
void m2c(int m , int &c , BYTE k)
{
union{
int a;
BYTE b[4];
}d,e;
d.a=m;
for(int i=0;i<4;i++) e.b[i]=(d.b[i]+k)%256;
c=e.a;
}
void c2m(int m , int &c , BYTE k)
{
union{
int a;
BYTE b[4];
}d,e;
d.a=m;
for(int i=0;i<4;i++) e.b[i]=(d.b[i]+256-k)%256;
c=e.a;
}
void m2c_vige(BYTE m[] , BYTE c[] , unsigned char *k)
{
int n=0,i;
for(i=0;k[i]!='\0';i++)n++;
for(i=0;i<n;i++)
c[i]=(m[i]+k[i])%256;
}
void c2m_vige(BYTE m[] , BYTE c[] , unsigned char *k)
{
int n=0,i;
for(i=0;k[i]!='\0';i++)n++;
for(i=0;i<n;i++)
c[i]=(m[i]+256-k[i])%256;
}
void m2c_p(char m[] , char c[] , char k[], int nm)
{
int n,i,j,js,nk;
int *korder;
char kmin,kmax;
nk=0;
for(i=0;k[i]!='\0';i++)nk++;//計算密鑰長度
//計算密鑰順序表korder
korder=(int*)malloc((nk)*sizeof(int));
for(j=0;j<nk;j++)*(korder+j)=-1;
kmax=k[0];
for(i=1;i<nk;i++)
if(k[i]>kmax) kmax=k[i];
n=1;
for(j=0;j<nk;j++)
{
kmin=kmax;
for(i=0;i<nk;i++)
if(*(korder+i)==-1 && k[i]<=kmin) n=i,kmin=k[i];
*(korder+n)=j;
}
//加密
n=0;
for(i=0;i<nk;i++)
{
for(j=0;j<nk;j++)
if(*(korder+j)==i)js=j;
for(j=js;j<nm;j+=nk)
{
c[n]=m[j];
n++;
}
}
}
void c2m_p(char m[] , char c[] , char *k, int nm)
{
int n,i,j,js,nk;
int *korder;
char kmin,kmax;
nk=0;
for(i=0;k[i]!='\0';i++)nk++;//計算密鑰長度
//計算密鑰順序表korder
korder=(int*)malloc((nk)*sizeof(int));
for(j=0;j<nk;j++)*(korder+j)=-1;
kmax=k[0];
for(i=1;i<nk;i++)
if(k[i]>kmax) kmax=k[i];
n=1;
for(j=0;j<nk;j++)
{
kmin=kmax;
for(i=0;i<nk;i++)
if(*(korder+i)==-1 && k[i]<=kmin) n=i,kmin=k[i];
*(korder+n)=j;
}
//解密
n=0;
for(i=0;i<nk;i++)
{
for(j=0;j<nk;j++)
if(*(korder+j)==i)js=j;
for(j=js;j<nm;j+=nk)
{
c[j]=m[n];
n++;
}
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -