乘法密码
简介:实现了乘法密码的加密和解密,能够通过功能3输入加密密钥,得到解密密钥。但是具有局限性,只支持26位英文字母。目的是为了体验乘法密码,所有程序的可靠性不做要求。
#include <iostream>
#include <stdio.h>
#include <string.h>
//#include<math.h>
using namespace std;
char mingwen[1000];
char miwen[1000];
//int ke = 5;
//int kd = 21;
void Shouye();
void Jiami();
void Jiemi();
void Find_Kd();
int gcd(int a,int b);
int main()
{
Shouye();
}
void Shouye()
{
//首页
int choice=0;
printf("------------首页------------\n");
printf("请选择加密(1)或解密(2)或求密钥Kd(3):");
scanf("%d",&choice);
if(choice == 1)
{
Jiami();
}
else if(choice == 2)
{
Jiemi();
}
else if(choice == 3)
{
Find_Kd();
}
else
{
printf("输入有误!");
}
}
void Jiami()
{ //加密函数
int ke;
printf("请输入明文:");
scanf("%s",mingwen);
printf("请输入加密密钥ke(0<ke<26):");
scanf("%d",&ke);
//printf("%s",mingwen);
int l;
l = strlen(mingwen);
//printf("%d",l);
for(int i = 0;i < l;i++)
{
miwen[i] = ((mingwen[i]-96)*ke%26)+96;
}
for(int i = 0;i < l;i++)
{
printf("%c",miwen[i]);
}
}
void Jiemi()
{ //解密函数
int kd;
printf("请输入密文:");
scanf("%s",miwen);
printf("请输入解密密钥kd(0<kd<26):");
scanf("%d",&kd);
//printf("%s",miwen);
int l;
l = strlen(miwen);
//printf("%d",l);
for(int i = 0;i < l;i++)
{
mingwen[i] = ((miwen[i]-96)*kd%26)+96;
}
for(int i = 0;i < l;i++)
{
printf("%c",mingwen[i]);
}
}
void Find_Kd()
{ //计算解密密钥kd
printf("输入加密密钥:");
int ke;
scanf("%d",&ke);
int res;
for(int i=1;i<26;i++)
{
//printf("%d,%d\n",i,gcd(26,i));
if(gcd(26,i)==1)
{
if(ke*i%26==1)
res = i;
}
}
printf("%d",res);
}
int gcd(int a,int b)
{ //求最大公约数
if(a%b==0) return b;
return gcd(b,a%b);
}