📄 加密 hill.c
字号:
/*本程序为Hill密码的加密过程*/
#include<stdio.h>
#include<conio.h>
#define X 4 /* 定义矩阵的行数,此数保持4不变,因为我们所做的题目密钥为4×4矩阵.*/
#define Y 5 /* 定义矩阵的列数,此数可以任意改变,视明文而定!*/
int a[4][Y]; /* 定义密文所对应的矩阵*/
int b[4][Y]; /* 定义明文所对应的矩阵*/
int c[4][4]={1,1,0,0,0,1,1,0,0,0,1,1,0,0,0,1}; /* 密钥K. */
void matrix(int b[4][Y],int c[4][4]);
main()
{
int i,j,temp;
int clrscr();
printf("Please input int mingwen b[%d][%d]=\n",X,Y);
for(i=0;i<X;i++)
for(j=0;j<Y;j++){
scanf("%c",&temp); /* 输入所提供的任何明文,明文为字符.*/
b[i][j]=temp-12897; /* 把明文中的每一个元素减去ASSII码,因为WIN-TC中的ASSII码与一般的不同,在原来的的基础上加12800.*/
}
/*printf("Please input int miyao c[%d][%d]\n",4,4);
for(i=0;i<4;i++)
for(j=0;j<4;j++){
scanf("%d",&temp);
c[i][j]=temp;
}*/
matrix(b,c);
/*printf("Now print resource mingwen b[%d][%d]=",X,Y);
for(i=0;i<X;i++){
printf("\n");
for(j=0;j<Y;j++)
printf("%d ",b[i][j]); } /*打印明文矩阵中每个元素减去ASSII码后所对应的矩阵(也可以不打)*/
printf("\n");
/*printf("Now print resource miyao c[%d][%d]=",4,4);
for(i=0;i<4;i++){
printf("\n");
for(j=0;j<4;j++)
printf("%d ",c[i][j]);
}
printf("\n");*/
printf("Now printm multiply results miwen a[%d][%d]=C*B:",X,Y);
for(i=0;i<X;i++){
printf("\n");
for(j=0;j<Y;j++)
/*printf("%d ",a[i][j]);*/
printf("%c ",a[i][j]); /*打印密文所对应的矩阵,但打成矩阵,与输入明文对应*/
}
printf("\n");
printf("Now printm multiply results miwen a[%d][%d]=C*B:",X,Y);
for(i=0;i<X;i++){
for(j=0;j<Y;j++)
/*printf("%d ",a[i][j]);*/
printf("%c",a[i][j]); /*打印密文所对应的矩阵,但打成一行,与输入明文对应*/
}
getch();
return 0;
}
/********************************************************************/
void matrix(int b[4][Y],int c[4][4]) /*计算两个矩阵相乘的的主函数*/
{
int i,j,k;
for(i=0;i<X;i++)
for(j=0;j<Y;j++){
for(k=0;k<Y;k++)
a[i][j]+=c[i][k]*b[k][j];
a[i][j]=a[i][j]%26+12897; /*得到密文后对密文进行还原.还原成我们所需要的字符.*/
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -