• 古典密码仿射密码Affine


    仿射密码Affine基础知识

    仿射密码属于一种替换密码,通过对一个字母使用加密函数(模运算)生成另外一个字母(某些情况下,不只是字母)。

    加密函数:

    \[E(x) ≡ (ax + b) (mod\ m) \]

    • a、b:函数的参数部分,不同的加密有不同的值
    • m:字母的数量,一般值为26、32等
    • a与m互质

    解密函数:

    \[D(x) ≡ a^{-1}(x-b)(mod\ m) \]

    • \(a^{-1}\)是a关于模m的乘法逆元

    上述解密函数的式子是相对于加密函数而言的,特殊情况下(直接要得到解密函数的参数时)可以直接设解密函数为y = a*x + b (mod Z)

    仿射密码wiki

    举个栗子

    加密

    以加密函数 \(E(x) = (5x + 8) (mod 26)\) 为例,以字母表26个字母作为编码系统

    明文 A F F I N E C I P H E R
    x 0 5 5 8 13 4 2 8 15 7 4 17
    y = 5x+8 8 33 33 48 73 28 18 48 83 43 28 93
    y mod 26 8 7 7 22 21 2 18 22 5 17 2 15
    密文 I H H W V C S W F R C P

    对应的加密结果为:IHHWVCSWFRCP

    解密

    在已知a = 5,m = 26的情况下,我们需要求a关于模m的逆元,

    根据乘法逆元的定义,我们可以得到如下式子:

    \[a·a^{-1} ≡ 1 (mod\ m) \]

    带入参数,有\(5·a^{-1} ≡ 1(mod 26)\) ,可以得到\(a^{-1}\) = 21

    因此解密函数为:\(D(x) = 21(x - 8) (mod 26)\)

    密文 I H H W V C S W F R C P
    y 8 7 7 22 21 2 18 22 5 17 2 15
    x = 21(y−8) 0 -21 -21 294 273 -126 210 294 -63 189 -126 147
    x mod 26 0 5 5 8 13 4 2 8 15 7 4 17
    明文 A F F I N E C I P H E R

    解密后的明文结果为:AFFINECIPHER

    相关题目

    题目来源:https://adworld.xctf.org.cn/task/answer?type=crypto&number=5&grade=1&id=5535&page=1

    题目信息

    wK3GgH.png

    题目分析

    1. 改题目源自bitsctf-2017,对BITSCTF这几个字符进行base32加密得到IJEVIU2DKRDA==== base32加密网站
    2. 与文件所给的字符进行对比
    M Z Y V M I W L G B L 7 C
    I J E V I U 2 D K R D A ====
    

    可以看到M和I一直都是对应的,故想到移位加密和仿射加密,易排除移位加密

    1. 反射密码的解密需要解密函数,但这里并没有解密函数,我们需要先得到解密函数
    for a in range(-20,20):
        for b in range (-20,20):
            if (a*12+b)%32 == 8 and (a*25+b)%32 == 9:
                print(a,b)
    

    可以得到a=5 b=12(多增加IF处的判断语句就可以更加精确)

    1. 得到了ab,使用解密公式y = a*x+b (mod32)
    c = "MZYVMIWLGBL7CIJOGJQVOA3IN5BLYC3NHI"
    sn = "ABCDEFGHIJKLMNOPQRSTUVWXYZ234567"
    msg = ""
    for i in c:
        msg += str(sn[(5*sn.find(i)+12)%32])
    print(msg)
    

    得到IJEVIU2DKRDHWUZSKZ4VSMTUN5RDEWTNPU

    放入base32解密得到BITSCTF{S2VyY2tob2Zm}

    参考资料

    https://www.cnblogs.com/Mayfly-nymph/p/12394329.html

    https://www.bilibili.com/video/BV1Gh411o7vM?t=332

    https://www.bilibili.com/video/BV1qE411i7Zq?t=535

    fanqiang

    仿射密码wiki

    [仿射密码ctf-wiki](

  • 相关阅读:
    Android学习笔记之-----讯飞语音识别实例化RecognizerDialog参数出现错误的解决方法
    java基本数据类型取值范围
    中国教育
    git push --help
    cherry Tree的严重漏洞
    程序的核心是什么
    BeanUtils.getProperty性能分析
    Java各种反射性能对比
    Spring AOP无法拦截Controller中的方法
    Mock单元测试
  • 原文地址:https://www.cnblogs.com/labster/p/13629823.html
Copyright © 2020-2023  润新知