📄 colum_permu.h
字号:
#include <iostream>
#include <string>
#define N 1024
#include "Column_permutation.h"
using namespace std;
class Column
{
public:
void encipher(char *K,char *t)//加密
{
struct KEY
{
char k;
int c1;//记录排序后的位置
int c2;//记录排序前的位置
}KEY[N];
int order[N];
char table[100][100];
key=K;
text=t;
int k_len=strlen(key);
int i,j,m,n=0,temp2=0;
char temp1;
for(i=0;i<k_len;i++)//初始化结构体
{
KEY[i].k=key[i];
KEY[i].c1=i;
KEY[i].c2=i;
}
for(i=0;i<k_len;i++)//给密钥字母排序
{
for(j=i;j<k_len;j++)
{
if(KEY[i].k>KEY[j].k)
{
temp1=KEY[i].k;
KEY[i].k=KEY[j].k;
KEY[j].k=temp1;
///////////////
temp2=KEY[i].c1;
KEY[i].c1=KEY[j].c1;
KEY[j].c1=temp2;
}
}
}
for(i=0;i<k_len;i++)//记录排序后各字母的位置
{
n=KEY[i].c1;
order[n]=KEY[i].c2;
}
//---------------明文的处理-----------------
int l=strlen(key);//列
int h; //行
n=strlen(text);//明文长度
int y=n%l;//余数
if(y==0)
h=n/l;
else
{
h=n/l+1;
for(i=0;i<l-y;i++)//在末尾加q
text[n+i]='q';
text[n+i]='\0';
}
n=0;//填充二维数组
for(i=0;i<h;i++)
{
for(j=0;j<l;j++)
{
table[i][j]=text[n];
n++;
}
}
n=0;//加密并把密文放入TEXT中
for(j=0;j<k_len;j++)
{
for(i=0;i<h;i++)
{
m=order[j];
text[n++]=table[i][m];
}
}
text[n]='\0';
}
void decipher(char *K,char *t)//解密
{
struct KEY
{
char k;
int c1;//记录排序后的位置
int c2;//记录排序前的位置
}KEY[N];
int order[N];
char table[100][100];
key=K;
text=t;
int k_len=strlen(key);
int i,j,m,n=0,temp2=0;
char temp1;
for(i=0;i<k_len;i++)//初始化结构体
{
KEY[i].k=key[i];
KEY[i].c1=i;
KEY[i].c2=i;
}
for(i=0;i<k_len;i++)//给密钥字母排序
{
for(j=i;j<k_len;j++)
{
if(KEY[i].k>KEY[j].k)
{
temp1=KEY[i].k;
KEY[i].k=KEY[j].k;
KEY[j].k=temp1;
///////////////
temp2=KEY[i].c1;
KEY[i].c1=KEY[j].c1;
KEY[j].c1=temp2;
}
}
}
for(i=0;i<k_len;i++)//记录排序后各字母的位置
{
n=KEY[i].c1;
order[n]=KEY[i].c2;
}
//-------------密文处理---------------
int l=strlen(key);//列
int h; //行
n=strlen(text);//密文长度 即列数
h=n/l;//计算行数
n=0;//解密并把明文放入TEXT中
for(j=0;j<l;j++)
{
for(i=0;i<h;i++)
{
m=order[j];
table[i][m]=text[n++];
}
}
n=0;
for(i=0;i<h;i++)
{
for(j=0;j<l;j++)
{
text[n++]=table[i][j];
}
}
int t_len=strlen(text);
for(i=t_len-1;i>t_len-k_len;i--)
{
if(text[i]=='q')
{
text[i]='\0';
}
}
}
private:
char *key;
char *text;
};
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -