iscc2016-basic-find-to-me

本文介绍了一种基于仿射变换的加密解密方法,并通过一个具体的解密例子进行了解释说明。文中给出了用于解密的数学公式推导过程及对应的Python代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

额 第一题就暴力搜索了

 

已知仿射加密变换为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)

  

转载于:https://www.cnblogs.com/ailx10/p/5543773.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值