找到一个HILL加密算法,做了一个简单的修改,源码如下:
#include<stdio.h>
#define N 3 //可加密的字符串长度
---------------------------------------------------------------------------------------------------------------
char plaintext[N]; //明文,输入时输入字符,参与运算时强制转换成整数
int ciphertext[N]; //密文,保存成整数,输出时强制转换成字符
int key[N][N]; //密钥矩阵,也就是密匙
----------------------------------------------------------------------------------------------------------------
void getPlainText() //获得明文字符串
{
printf("请输入明文:");
scanf("%s",plaintext);
printf("\n");
}
----------------------------------------------------------------------------------------------------------------
void getKey() //输入密钥矩阵
{
int i,j;
printf("请输入加密矩阵:\n");
for(i=0;i<N;i++)
for(j=0;j<N;j++)
scanf("%d",&key[i][j]);
printf("\n");
}
----------------------------------------------------------------------------------------------------------------
void hill() //Hill加密算法
{
int i,j;
for(i=0;i<N;i++){ //矩阵的乘法
for(j=0;j<N;j++){ //计算转换依据,0~25对应a~z
ciphertext[i]+=key[i][j]*(int)(plaintext[j]-'a');
ciphertext[i]%=26;
}
}
printf("\n");
}
-----------------------------------------------------------------------------------------------------------------
void printCipherText() //输出加密后的密文
{
int i;
printf("加密后的密文是:");
for(i=0;i<N;i++) //把参与计算后是整数强制转换成对应的字符
printf("%c",(char)(ciphertext[i]+'a'));
printf("\n");
}
-------------------------------------------------------------------------------------------------------------------
void main()
{
getPlainText(); //明文
getKey(); //密钥
hill(); //加密
printCipherText(); //密文
}