hill.cpp

来自「HILL密码加解密的C++实现」· C++ 代码 · 共 74 行

CPP
74
字号
#include<iostream>
#include<math.h>
using namespace std;
int rownum,**Matrix_K,**Matrix_P,*result;

void multiply(){   
	 for (int i=0;i<rownum;i++)
	 {
		 result[i]=0;
		 for (int j=0;j<rownum;j++)
		 {
			 result[i]+=Matrix_K[i][j]*Matrix_P[j][0];
			 result[i]%=26;
		 }
		 cout<<char(result[i]+96)<<" ";
	 }
}

void main(){
	cout<<"请输入矩阵的大小!"<<endl;
	cin>>rownum;
	result=new int[rownum];
	Matrix_K=new int*[rownum];
	for(int i=0;i<rownum;i++) 
		Matrix_K[i]=new int[rownum]; 

	Matrix_P=new int*[rownum];
	for(int i=0;i<rownum;i++) 
		Matrix_P[i]=new int[1]; 

	cout<<"\n***加密***\n"<<endl;
	cout<<"请按行输入密钥K!"<<endl;
	for(int i=0;i<rownum;i++){
		for(int j=0;j<rownum;j++)
			cin>>Matrix_K[i][j];
	}

	cout<<"请输入明文!"<<endl;
	char s[64];
	cin>>s;

	for(int i=0;i<strlen(s);i++){
		Matrix_P[i%rownum][0]=s[i]-'a'+1;
		if (i%rownum==rownum-1)
		{
			multiply();
		}
	}
    cout<<endl;
	cout<<"\n***解密***\n"<<endl;
	cout<<"请按行输入逆密钥K!"<<endl;
	for(int i=0;i<rownum;i++){
		for(int j=0;j<rownum;j++)
			cin>>Matrix_K[i][j];
	}

	cout<<"请输入密文!"<<endl;

	char q[64];
	cin>>q;

	for(int i=0;i<strlen(q);i++){
		Matrix_P[i%rownum][0]=q[i]-'a'+1;
		if (i%rownum==rownum-1)
		{
			multiply();
		}
	}
	for(int i=0;i<rownum;i++) {
		delete []Matrix_K[i];
		delete []Matrix_P[i];
	}
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?