ISCC-BASIC-50-easy?
2015-05-30 19:11
267 查看
[title2]easy?[/title2]
50
密文mzdvezc是用仿射函数y=5x+12加密得到的,试对其解密。分析:
查了查百科,了解了什么是仿射函数。
百度百科关于仿射加密法的介绍
仿射函数里用0~25表示字母a~z。
加密函数其实是y=(5x+12)mod 26,那么如何算出解密函数呢?
设解密函数为y=(m*x+n)mod 26
先求5的逆元。m是5关于Z26的逆元,则有(5*m)mod 26=1,不难算出m=21。
再求n。
解密函数就是加密函数的逆函数,即(x,y)是加密函数的一组解,那么(y,x)就是解密函数的一组解。
那么假设x=3,y=(5*3+12)mod 26=1。相应的逆函数的解就因该是(1,3)。即 3=(21*1+n)mod 26,式子可以写成26*N+3=21*1+n,那么取N=1,则 n=8,故y=(21x+8)mod 26。
当然,这里N取不同值,n的值就会不同,但是得到的函数其实是一样的,只是相差26的整数倍而已,用来计算的话,得到的答案都是一样的。
比如,N=0,n=-18,则y=(21x-18)mod 26,它和y=(21x+8)mod 26算出来的答案是一样的,只要n之间的差是26的整数倍就可以了,
8-(-18)=26, 34-8=26, 所以n=34也可以,以此类推。
然后代码实现:
#include<iostream> using namespace std; int main() { char a[]={'m','z','d','v','e','z','c'}; for(int i=0;i<7;i++) { int t; t=a[i]-'a'; t=(21*t+8)%26; a[i]=t+'a'; cout<<a[i]; } return 0; }
答案就是anthony
相关文章推荐
- mysql注意事项
- strlen 与 sizeof的区别
- 【Flume】Rpc sink XX closing Rpc client:NettyAvroRpcClient {xx} …… Failed to send events 问题解决
- TCP连接状态详解
- 软件工程第五次作业
- A
- Housse Robber II | leetcode
- JS 屏蔽键盘与鼠标事件
- 如何将3DSMAX中模型缩小1000倍,导入到CityEngine中
- 读浅墨博客 十四 笔记
- 06-图1. List Components (25) (邻接表实现)
- JAVA 动态代理与AOP编程(面向切面编程)
- Arduuino复合运算符+Arduino基础~~~
- hdu 5248(二分)
- 浏览器原理与内存泄漏
- Python调用Matlab2014b引擎
- 关于detours的用法
- ORA-12514: TNS: 监听程序当前无法识别连接描述符中请求的服务
- linux c编程实现cd目录切换功能(带空格的目录名问题)
- 取得键盘每个按键的keyCode的值