题目给了一个密文以及一段加密代码
密文:

805eed80cbbccb94c36413275780ec94a857dfec8da8ca94a8c313a8ccf9

加密代码

import sys
key = '****CENSORED***************'
flag = 'TWCTF{*******CENSORED********}'if len(key) % 2 == 1:print("Key Length Error")sys.exit(1)n = len(key) / 2
encrypted = ''
for c in flag:c = ord(c)for a, b in zip(key[0:n], key[n:2*n]):c = (ord(a) * c + ord(b)) % 251encrypted += '%02x' % cprint(encrypted)

按照加密代码所示:
对于给定flag里面的任意一个字符:

for c in flag:for i in range(0, n):c = (a[i] * c + b[i]) % 251

那么将其展开其实就是:
cn=(an(an−1(...(a1c1+b1)...)+bn−1)+bn)%251c_{n} = (a_{n}(a_{n-1}(...(a_1c_1 + b_1)...)+b_{n-1})+b_{n})\%251cn​=(an​(an−1​(...(a1​c1​+b1​)...)+bn−1​)+bn​)%251
而我们需要的仅仅是c1c_1c1​到cnc_ncn​的转化,所以该式最终可以转化为:
cn=(ac1+b)%251c_n = (ac_1+b)\%251cn​=(ac1​+b)%251
那么我们只要求出a和b就可以进行解码了
给定的flag中有一些确定的字符:“TWCTF{”
那么我们可以根据这些字符以及对应的编码后的数字来求a,b
{128=(a∗84+b)%25194=(a∗87+b)%251237=(a∗67+b)%251203=(a∗70+b)%251188=(a∗123+b)%251\left\{ \begin{aligned} 128 = (a*84 + b) \% 251\\ 94 = (a*87 + b)\%251\\ 237=(a*67+b)\%251\\ 203=(a*70+b)\%251\\ 188=(a*123+b)\%251 \end{aligned} \right.⎩⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎧​128=(a∗84+b)%25194=(a∗87+b)%251237=(a∗67+b)%251203=(a∗70+b)%251188=(a∗123+b)%251​
拿几个式子相减就可以去掉b:
{3a=k1∗251−3420a=52∗251−143\left\{ \begin{aligned} 3a=k_1*251-34\\ 20a=5_2*251-143 \end{aligned} \right. {3a=k1​∗251−3420a=52​∗251−143​
根据这两个式子可以解出来 a=156a=156a=156
进而尝试求出 b=76b=76b=76
如此,便可以进行解码了
对flag中的每一个字符,在ascii可见字符中进行尝试,知道编码后结果与给定结果相同为止

# 将给定的十六进制数,变为字节码放入hexarray中
def convert_hexarray(s):hexarray = []while s:hexarray.append(s & 0xff)s >>= 8hexarray.reverse()return hexarraydef solve(hexarray, a, b):flag = ""for data in hexarray:# 枚举ascii码所有可见字符,并用 (a * c + b) % 251 编码,判断是否与给定编码相等for c in range(0x20, 0x7f):if (a * c + b) % 251 == data:flag += chr(c)breakreturn flagif __name__ == "__main__":output_hex = 0x805eed80cbbccb94c36413275780ec94a857dfec8da8ca94a8c313a8ccf9a = 156b = 76print(solve(convert_hexarray(output_hex), a, b))

flag: TWCTF{Faster_Than_Shinkansen!}

jarvisoj-Crypto-superexpress相关推荐

  1. c4d+ps打造抽象NFT加密艺术 Create Abstract NFT Crypto Art with Cinema 4D + Photoshop

    c4d+ps打造抽象NFT加密艺术 Create Abstract NFT Crypto Art with C4D + PS c4d+ps打造抽象NFT加密艺术 Create Abstract NFT ...

  2. Python3模块Crypto改为pycryptodome

    安装: # 安装方式1: pip3 install pycryptodome# 安装方式2: pip3 install -i https://pypi.douban.com/simple pycryp ...

  3. go标准库的学习-crypto/aes

    参考:https://studygolang.com/pkgdoc 导入方式: import "crypto/aes" aes包实现了AES加密算法,参见U.S. Federal ...

  4. centos/Debian/Ubuntu上安装PyCryptodome/Crypto

    注意:PyCryptodome是Crypto的升级版,不要安装旧的Crypto了. 如果能联网,直接装: pip3 install PyCryptodome GitHub仓库地址:Legrandin/ ...

  5. 使用Crypto++的AES GCM对称加密

    这里记录使用Crypto++的AES GCM对称加密的代码片段,可直接执行 运行环境:Windows, Visual Studio 2017 需安装Crypto++库,可使用cvpkg工具直接集成该库 ...

  6. 使用Crypto++ ecdsa 进行签名和认证

    这里记录使用Crypto++ ecdsa 进行签名和认证的代码片段,可直接运行. 运行环境:Windows, Visual Studio 2017 需安装Crypto++库,可使用cvpkg工具直接集 ...

  7. go标准库的学习-crypto/sha1

    参考:https://studygolang.com/pkgdoc 导入方式: import "crypto/sha1" sha1包实现了SHA1哈希算法,参见RFC 3174. ...

  8. com.sun.crypto.provider.SunJCE

    为什么80%的码农都做不了架构师?>>>    Could not instantiate bean class [com.lz.monitor.alert.service.Serv ...

  9. javax.crypto.BadPaddingException: Data must sta...

    为什么80%的码农都做不了架构师?>>>    错误:javax.crypto.BadPaddingException: Data must start with zero RSA是 ...

  10. 使用crypto模块实现md5加密功能(解决中文加密前后端不一致的问题)

    使用crypto模块实现md5加密功能(解决中文加密前后端不一致的问题) 参考文章: (1)使用crypto模块实现md5加密功能(解决中文加密前后端不一致的问题) (2)https://www.cn ...

最新文章

  1. pytorch maxpool和卷积尺寸问题
  2. Java程序员从笨鸟到菜鸟全部博客目录
  3. 最短网络 Agri-Net
  4. 初学者指南:如何为Red Hat Process Automation Manager配置电子邮件服务任务
  5. C语言指针变量--图示易懂
  6. Vmware之锁定文件失败
  7. 如何建设一个开源图形引擎的文档网站
  8. Java工程师的职业规划(最全版本)
  9. H5接入微信SDK 实现微信支付
  10. 2019秋招|从春招到秋招,Java岗经验总结(收获AT)
  11. C语言实现王者荣耀护甲减免机制
  12. 对经典恒流源做电子负载 分析
  13. QQ音乐推荐歌单API报错 invalid referer
  14. DNF之架设搭建游戏流程讲解
  15. 一文带你看懂小程序朋友圈广告是什么
  16. Unity Shader - BRP - Soft Particle - 软粒子
  17. 【无标题】残余应力 conception
  18. Kodi 电影海报墙显示电影名称(通过修改默认皮肤样式)
  19. 怎么用微信在蘑菇街结算
  20. 2021年教师资格证面试试讲稿:小学英语 Welcome to Africa

热门文章

  1. DHU 第一题 重排链表
  2. 计算机真值范围,计算机的机器数,真值,原码, 反码和补码
  3. 爱游思 » 站长常用工具
  4. 图像灰度值 灰度值与像素值的关系
  5. Pandas中DataFrame的属性、方法、常用操作以及使用示例
  6. web渗透测试----11、身份认证漏洞
  7. AlertDialog对话框详例
  8. ArcGIS Desktop 10.5 打开遇到严重的应用程序错误的解决办法
  9. 苏州大学9月计算机考试试题,2016年9月计算机一级考试试题含答案
  10. item_get - 获得淘宝商品详情接口调用