⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 解密 hill.c

📁 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,1,-1,0,1,-1,1,0,0,1,-1,0,0,0,1};  /*密钥所对应的逆矩阵*/
void matrix(int b[4][Y],int c[4][4]);
main()
{
int i,j,temp;
int clrscr();
printf("Please input int miwen 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.*/
}
matrix(b,c);
/*printf("Now print resource miwen 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 printm multiply results mingwen a[%d][%d]=C*B:",X,Y);
for(i=0;i<X;i++){
printf("\n");
for(j=0;j<Y;j++)
printf("%c  ",a[i][j]);        /*打印明文所对应的矩阵,但打成矩阵,与输入明文对应*/
}
printf("\n");
printf("Now printm multiply results mingwen a[%d][%d]=C*B:",X,Y);
for(i=0;i<X;i++){
for(j=0;j<Y;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;
if (a[i][j]<0){ a[i][j]=a[i][j]+26 ;}        /*以26为一个循环,但两个矩阵相乘可能得到的值为负数,把它转换为相应的正值.*/
a[i][j]=a[i][j]%26+12897;                  /*得到明文后对密文进行还原.还原成我们所需要的字符.*/
}
}  

 
 
 
 
 

⌨️ 快捷键说明

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