扩展的凯撒密码实现
2009-12-29 22:48
726 查看
用程序实现扩展的加密算法
凯撒密码:C = (M+K)mod 26 ——> C = (K1*M+K2)mod
这当中K1是有限制的,而K2是任意的
[b]1. 确定在模26内哪些数能作为K1使用。[/b]
[b] 方法:从0-25内其中任何一个数,有且只有一个数在模26内,存在一个逆[/b]
输出结果:
即在1-25之间只有以上几个数才能作为K1 ,不然会出现问题
2. 在之前的基础上确认k1和k2
3. 输入明文:thetaskiscancelled, 输出密文
解决方法:
解释利用c = (K1*m+K2)mod 26 这个公式,计算出结果。其中用数组realWord[19]来表示文明,用数组screctWord[i]来表示密文,当中最重要的是以下公式:
screctWord[i] = (K1*(realWord[i]-'a')+K2)%26+'a'
四、实验数据:
这就是用上述的算法实现的数据输出,明文(上)与密文(下)
凯撒密码:C = (M+K)mod 26 ——> C = (K1*M+K2)mod
这当中K1是有限制的,而K2是任意的
[b]1. 确定在模26内哪些数能作为K1使用。[/b]
[b] 方法:从0-25内其中任何一个数,有且只有一个数在模26内,存在一个逆[/b]
int n[26] = {0}; int i,j; for(i=0;i<26;i++){ for(j=0;j<26;j++){ if((i*j)%26==1){ n[i]++; } } } for(i=0;i<26;i++){ if(n[i]==1) cout<<i<<' '; } cout<<endl;
输出结果:
即在1-25之间只有以上几个数才能作为K1 ,不然会出现问题
2. 在之前的基础上确认k1和k2
3. 输入明文:thetaskiscancelled, 输出密文
解决方法:
解释利用c = (K1*m+K2)mod 26 这个公式,计算出结果。其中用数组realWord[19]来表示文明,用数组screctWord[i]来表示密文,当中最重要的是以下公式:
screctWord[i] = (K1*(realWord[i]-'a')+K2)%26+'a'
//实现扩展的凯撒加密算法 //K1 = [学号末两位数 % 26] ,K2 = 学号末两位的平法 % 26 //输入明文:thetaskiscancelled,输出密文 //writed by zjd(200926740330) #include<iostream> using namespace std; int main(){ //先计算在模26上能当K1的数 int n[26] = {0}; int i,j; for(i=0;i<26;i++){ for(j=0;j<26;j++){ if((i*j)%26==1){ n[i]++; } } } for(i=0;i<26;i++){ if(n[i]==1) cout<<i<<' '; } cout<<endl; int mySID = 30; int K1 = 5;// 30 % 26 = 4,但4是不能当K1的,所以取比它大的,且可以当做的书5 int K2 = (30*30)%26; char realWord[19] = {'t','h','e','t','a','s','k','i','s','c','a','n','c','e','l','l','e','d','/0'}; char screctWord[19]; for(i=0;i<18;i++){ screctWord[i] = (K1*(realWord[i]-'a')+K2)%26+'a'; } screctWord[18] = '/0'; //输出明文: cout<<realWord<<endl; //输出密文 cout<<screctWord<<endl; return 0; }
四、实验数据:
这就是用上述的算法实现的数据输出,明文(上)与密文(下)
相关文章推荐
- 利用PHP SOAP扩展实现简单Web Services
- 《模式——工程化实现及扩展》(设计模式C# 版)《连贯接口 Fluent Interface》——“自我检验"参考答案
- C#扩展方法 实现全角和半角的转换
- 【扩展】Freemarker模板遍历集合实现下载word部分文字隐藏
- javascript实现css选择器引擎,可自由扩展
- [.NET领域驱动设计实战系列]专题十:DDD扩展内容:全面剖析CQRS模式实现
- Yaf-一个PHP扩展实现的PHP框架
- 利用润乾时间日期函数实现日期扩展功能
- 谷歌地图控件,通过扩展实现GMAP的自定义绘图系统
- PHP扩展类ZipArchive实现压缩解压Zip文件和文件打包下载
- PropertyPlaceholderConfigurer扩展,实现数据库密码加密
- php实现基于微信公众平台开发SDK(demo)扩展的方法
- PHP CLI模式下PCNTL扩展实现多进程服务
- 用C实现PHP扩展 Fetch_Url 类数据抓取的方法
- 【IOS】扩展UIImageViewEx实现:手势移动,旋转,缩放(附带一个收缩的文字标签功能)
- WPF:实现自定义标记扩展
- 扩展IQueryable实现属性名称排序
- linux下C 线程池的原理讲解和代码实现(能自行伸缩扩展线程数)
- TextView实现扩展和收起