iscc2016-basic-find-to-me
额 第一题就暴力搜索了
已知仿射加密变换为c=(11m+8)mod26,试对密文sjoyuxzr解密
#include <stdio.h>
int main(void)
{
    int m,c;
    while(scanf("%c",&m))
    {
        c = (11 * (m -97)+ 8)%26;
        printf("%c",c+97);
    }
    return 0;
}
看了大神的代码 有所醒悟
c= Ek(m)=(k1m+k2) mod n
{
c-k2 = k1 *m mod n
令k3*k1 mod n =1
得(c - k2) * k3 = m mod n
m = (c - k2) * k3
}
m=Dk(c)=k3(c- k2) mod n(其中(k3 ×k1)mod26 = 1)
 
def extendedGCD1(a, b):
    # a*xi + b*yi = ri
    if b == 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)
    ========================if i have some wrong, please give me a message, thx.========================
 
                    
                     
                    
                 
                    
                 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号