iscc2016-basic-find-to-me
2016-05-30 20:10
239 查看
额第一题就暴力搜索了
已知仿射加密变换为c=(11m+8)mod26,试对密文sjoyuxzr解密
#include<stdio.h>
intmain(void)
{
intm,c;
while(scanf("%c",&m))
{
c=(11*(m-97)+8)%26;
printf("%c",c+97);
}
return0;
}
看了大神的代码有所醒悟
c=Ek(m)=(k1m+k2)modn
{
c-k2=k1*mmodn
令k3*k1modn=1
得(c-k2)*k3=mmodn
m=(c-k2)*k3
}
m=Dk(c)=k3(c-k2)modn(其中(k3×k1)mod26=1)
defextendedGCD1(a,b):
#a*xi+b*yi=ri
ifb==0:
return(1,0,a)
(x,y,r)=extendedGCD1(b,a%b)
"""
gcd(a,b)=a*xi+b*yi
gcd(b,a%b)=b*xi+1+(a-[a/b]*b)*yi+1
gcd(a,b)=gcd(b,a%b)=>a*xi+b*yi=a*yi+1+b*(xi+1-[a/b]*yi+1)
xi=yi+1
yi=xi+1-[a/b]*yi+1
"""
tmp=x
x=y
y=tmp-(a/b)*y
return(x,y,r)
已知仿射加密变换为c=(11m+8)mod26,试对密文sjoyuxzr解密
看了大神的代码有所醒悟
#a*xi+b*yi=ri
ifb==0:
return(1,0,a)
(x,y,r)=extendedGCD1(b,a%b)
"""
gcd(a,b)=a*xi+b*yi
gcd(b,a%b)=b*xi+1+(a-[a/b]*b)*yi+1
gcd(a,b)=gcd(b,a%b)=>a*xi+b*yi=a*yi+1+b*(xi+1-[a/b]*yi+1)
xi=yi+1
yi=xi+1-[a/b]*yi+1
"""
tmp=x
x=y
y=tmp-(a/b)*y
return(x,y,r)
相关文章推荐
- Easy-题目25:101. Symmetric Tree
- zsh的自动完成辅助工具:oh-my-zsh
- 天注定--从现在开始的展望
- SNMP++ 04-SNMP中OBJECT IDENTIFIER的BER编码与解码及一些思考
- Easy-题目24:110. Balanced Binary Tree
- 基因数据处理42之mango问题_seqdict.avro不存在解决
- Intent中的四个重要属性——Action、Data、Category、Extras
- 第二阶段团队项目冲刺站立会议(七)
- 51nod算法马拉松14
- Easy-题目23:21. Merge Two Sorted Lists
- 剑指offer-java(4)
- [JavaScript] 10.JS 表单操作
- 宏、函数、宏函数,内联函数的区别
- Easy-题目22:231. Power of Two
- leetcode 11
- 随机采样和随机模拟:吉布斯采样Gibbs Sampling实现高斯分布参数推断
- 随机采样和随机模拟:吉布斯采样Gibbs Sampling实现高斯分布参数推断
- H-Index
- TCP通信转HTTP桥接器(转发zabbix数据为例)
- POJ 3258 River Hopscotch (二分法)