📄 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 + -