古典密码之乘法密码

本文介绍了古典密码中的简单乘法加密算法,包括原理、加密与解密过程。通过实例展示了如何使用该算法对英文单词进行加密和解密,强调了密钥的选择条件及其重要性。
部署运行你感兴趣的模型镜像

学习目标:

  • 熟练掌握多表古典密码简单乘法加密算法原理及实现。
  • 掌握多表古典密码简单乘法加密算法的应用。

预备知识:

乘法密码是简单代替密码的一种。

它需要预先知道消息元素的个数,加密的过程其实是相当于对明文消息所组成的数组下标进行加密,然后用明文消息中加密后位置所对应的明文字符代替。

多表古典密码简单乘法加密算法:

Step1:确定k和q的值;

Step2:输入相应的密文;

Step3:作变换c=(mi*ki) mod q,字母用ASCII码变为数字后计算;

Step4:得到相对应的明文;

Step5:逐一输出明文。


实验步骤:

创建文件multip.cpp
示例代码如下:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <conio.h>
main( )
{
char M[200];
char C[200] ;
int K[200] ,q=26,i,j;
srand( (unsigned)tinme( NULL ) );
for(j=0;j<=200;j++)
{
K[j]=rand( )%50;
}
printf("please input chars:\n");
gets(M) ;
for(i= 0;M[i]!='\0' ;i++)
{
if(M[i]>='a' &&M[i]<='z')
C[i]=((M[i]-'a'+1)*K[i])%q+'a' ;
}
else if(M[i]>='A' &&M[i]<='Z')
C[i]=((M[i]-'A'+1)*K[i])%q+'A';
}
else
C[i]=M[i] ;
}
C[i]='\0';
printf("The result is:\n%s\n",C);
getch() ;
return 0;
}

实验结果如下:
实验结果

思考:

乘法密码加密算法的原理:
它需要预先知道消息元素的个数,加密的过程其实是相当于对明文消息所组成的数组下标进行加密,然后用明文消息中加密后位置所对应的明文字符代替。

设明文消息元素个数为n,密钥为k。

密钥k在选取的时候应满足两个条件:

(1)0<k<n

(2)k与n互素

设明文消息为M,消息元素为m;

则密文消息为C,密文元素为c=m*k mod n;

其解密过程如下:

首先要得到解密密钥,就是要求得加密密钥k模n的逆元 ;

具体求法为k * mod n=1;

然后计算m=c * mod n即可得到明文消息M。

举例说明如下:

英文字母有26个,即n=26;

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26

M=m[26]={a , b , c ,d , e , f , g , h , i , j , k , l , m , n , o , p , q , r , s , t , u , v , w , x , y , z };

我们选取密钥k=5;

现在我们对hello进行加密

hello所对应的数组为[8,5,12,12 15];

由于8*5 (mod 26) =40(mod)26=14;

依次类推,可得到加密后的数组为[ 14 , 25,8,8, 23 ];

对应的密文消息就是nyhhw

现在我们开始对nyhhw解密

首先要求得解密密钥 ;

由于5*21(mod 26)=105(mod26)=1;

所以 =21;

nyhhw所对应的数组为[ 14 , 25,8,8, 23 ];

由于14*21(mod26)=294(mod26)=8;

依次类推,可得到解密后的数组为[8,5,12,12 15];

对应的明文消息就是hello。

您可能感兴趣的与本文相关的镜像

ACE-Step

ACE-Step

音乐合成
ACE-Step

ACE-Step是由中国团队阶跃星辰(StepFun)与ACE Studio联手打造的开源音乐生成模型。 它拥有3.5B参数量,支持快速高质量生成、强可控性和易于拓展的特点。 最厉害的是,它可以生成多种语言的歌曲,包括但不限于中文、英文、日文等19种语言

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值