zoukankan      html  css  js  c++  java
  • 攻防世界-密码学-shanghai

    1. 题目信息

    题目给出提示“维吉利亚密码”,密文在附件中。

    2. 分析

    由于维吉利亚密码加密时密钥重用,导致可通过分析密文进行破解;由于明文中存在一些出现频率很高的单词:the,and,for,with等等,因此很有可能这些单词再次被同样的密钥加密,从而生成同样的密文,其间隔一定是密钥长度的倍数,因此可通过对密文进行分析得到密钥的长度;另外,由于这些密文对应着那些出现频率高的明文,因此可破解出密钥;自己写了一个工具来求解这类问题。

    3. 解题

    如下是我使用工具的解题过程,注释是我自己加的,并非程序的输出

    $ python solve.py shanghai.txt
    # 先寻找密文中多次出现(本程序设定的至少3次)的词汇,并计算它们之间的距离,这有助于分析出密钥的长度
    word:  bju
    distance:  [1078, 2222, 154, 814, 132, 264]
    the minimum distance:  132
    
    word:  glv
    distance:  [660, 408, 186, 374, 88, 66, 836, 44, 649, 110, 880, 88, 209, 66]
    the minimum distance:  44
    
    word:  vxz
    distance:  [1936, 154, 264, 253, 121, 517, 154, 440, 11, 220, 66]
    the minimum distance:  11
    
    word:  bni
    distance:  [22, 979, 2002, 583, 165, 132, 22]
    the minimum distance:  22
    
    word:  xpg
    distance:  [11, 396, 660, 2409, 11, 374, 37, 51, 572]
    the minimum distance:  11
    
    word:  jcm
    distance:  [1595, 88, 99, 297, 781, 11, 22, 110, 66, 231, 627]
    the minimum distance:  11
    
    word:  zlr
    distance:  [286, 583, 583, 154, 22, 154, 22, 407, 55, 396, 1155]
    the minimum distance:  22
    
    word:  klm
    distance:  [594, 308, 605, 2145, 231, 297, 44, 44, 198]
    the minimum distance:  44
    
    word:  mfr
    distance:  [44, 99, 99, 715, 1884, 536]
    the minimum distance:  44
    
    word:  gvtyiz
    distance:  [165, 968, 550, 275, 220, 2167, 352]
    the minimum distance:  165
    
    word:  vtyiz
    distance:  [165, 968, 550, 275, 220, 2167, 352]
    the minimum distance:  165
    
    word:  tyiz
    distance:  [165, 968, 550, 275, 220, 2167, 352]
    the minimum distance:  165
    
    word:  yiz
    distance:  [165, 968, 550, 275, 220, 2167, 246, 106]
    the minimum distance:  106
    
    word:  opk
    distance:  [66, 1342, 385, 11, 1771, 583, 374]
    the minimum distance:  11
    
    word:  tyi
    distance:  [165, 968, 488, 62, 275, 220, 37, 1639, 491, 352]
    the minimum distance:  37
    
    word:  gvtyiz
    distance:  [165, 968, 550, 275, 220, 2167, 352]
    the minimum distance:  165
    
    word:  vtyiz
    distance:  [165, 968, 550, 275, 220, 2167, 352]
    the minimum distance:  165
    
    word:  pkv
    distance:  [297, 33, 407, 1221, 572, 88]
    the minimum distance:  33
    
    word:  gvtyiz
    distance:  [165, 968, 550, 275, 220, 2167, 352]
    the minimum distance:  165
    
    word:  vtyiz
    distance:  [165, 968, 550, 275, 220, 2167, 352]
    the minimum distance:  165
    
    word:  xui
    distance:  [638, 682, 77, 154, 55, 649, 363, 143]
    the minimum distance:  55
    
    word:  tui
    distance:  [55, 1628, 154, 286, 787, 797]
    the minimum distance:  55
    
    word:  gvtyiz
    distance:  [165, 968, 550, 275, 220, 2167, 352]
    the minimum distance:  165
    
    word:  vtyiz
    distance:  [165, 968, 550, 275, 220, 2167, 352]
    the minimum distance:  165
    #到此我们应该也能看出,密钥的长度为11
    #接下来,进行已知明文攻击
    #密文中有一段:frxnimp 1914 qil 1940,猜测是between 1914 and 1940
    plaintext:betweenand
    cipher:frxnimpqil
    possible key:enereicqvi len:10
    #如果需要更多的明-密文对分析,则输入y;否则,已计算出密钥,则可以进行解密你需要解密的内容
    try more plain-cipher(y) or start decrypt(n)y
    plaintext:the
    cipher:opk
    possible key:vig len:3
    try more plain-cipher(y) or start decrypt(n)n
    key:enereicqvig
    cipher:jtcw, '{' vvj 'zvkvrmtudabiecveaaxpp' grq '}'
    fgyf, '{' rnh 'jacpnzpdzszsjupanwglh' ebv '}'
    dpps, '{' erb 'xfpnligqmwtgohnywntyl' ypa '}'
    bnyj, '{' ref 'rtuajgphzjxacmawuwkly' cjo '}'
    olws, '{' irs 'vnifwenqqwkewafjsutcl' pni '}'
    tyuq, '{' rif 'irctbrloznxrautofsrlc' cam '}'
    hdho, '{' prw 'vegnpwymxwoenynckfpjl' tnz '}'
    brmb, '{' npf 'mrtrjkdzvuxvalrwykchj' cem '}'
    flag, '{' and 'vigenereisveryeasyhuh' and '}'
    spuu, '{' fab 'trxrailsnftcaprnwsvzu' ylm '}'
    fcyo, '{' tfo 'rpginvpmbkgayyiajwpnz' ljk '}'
    wpls, '{' ntt 'enereicqvylnwwrrwjthn' qwi '}'
    

    解出flag为flag{vigenereisveryeasyhuh}。

  • 相关阅读:
    响应式的WEB设计
    WPF的抽奖程序
    使用Visual Studio 利用WinGDB编译和远程调试嵌入式Linux的程序
    Sqler 工具帮你解决(更新部分监控)
    YSlow相关规则的调优工具和方法
    wcf基础笔记
    HTTP协议之状态码详解
    网站首页图片滚动显示
    CodeLove初版发布
    HDFS学习– Namenode and Datanode
  • 原文地址:https://www.cnblogs.com/coming1890/p/13526085.html
Copyright © 2011-2022 走看看