[BSidesSF2020]decrypto-1

题目

Kerckhoffs’s principle states that “A cryptosystem should be secure even if everything about the system, except the key, is public knowledge.” So here’s our unbreakable cipher.

import sys
import json
import hashlibclass Crypto:def __init__(self, key):if not isinstance(key, bytes):raise TypeError('key must be of type bytes!')self.key = keyself._buf = bytes()self._out = open("/dev/stdout", "wb")def _extend_buf(self):self._buf += self.keydef get_bytes(self, nbytes):while len(self._buf) < nbytes:self._extend_buf()ret, self._buf = self._buf[:nbytes], self._buf[nbytes:]return retdef encrypt(self, buf):if not isinstance(buf, bytes):raise TypeError('buf must be of type bytes!')stream = self.get_bytes(len(buf))return bytes(a ^ b for a, b in zip(buf, stream))def set_outfile(self, fname):self._out = open(fname, "wb")def encrypt_file(self, fname):buf = open(fname, "rb").read()self._out.write(self.encrypt(buf))class JSONCrypto(Crypto):def encrypt_file(self, fname):buf = open(fname, "r").read().strip()h = hashlib.sha256(buf.encode('utf-8')).hexdigest()data = {"filename": fname,"hash": h,"plaintext": buf,}outbuf = json.dumps(data, sort_keys=True, indent=4)self._out.write(self.encrypt(outbuf.encode("utf-8")))def main(argv):if len(argv) not in (3, 4):print("%s <key> <infile> [outfile]" % sys.argv[0])returnargv.pop(0)key = argv.pop(0)inf = argv.pop(0)crypter = JSONCrypto(key.encode("utf-8"))if sys.argv:crypter.set_outfile(argv.pop(0))crypter.encrypt_file(inf)if __name__ == '__main__':main(sys.argv)

flag.txt.enc

:TL\Z\QETVRQ
SIH fGNV\\\ETV[UVQU
]   A_]UC^  QWZC _RY@QYRU_[@^^[CfGNVDQ
]   U@VE-d2OM N8
_@boFbC    1SMM[L:

解题
科克霍夫斯原理声明“密码系统应该是安全的,即使系统的所有内容,除了密钥,都是公共知识。”所以这里是我们的牢不可破的密码。

牢不可破的密码,那就可能是一次一密了。

先读程序:

sys.argv[]是一个从程序外部获取参数的桥梁,因为我们从外部取得的参数可以是多个,所以获得的是一个列表,也就是说sys.argv其实可以看作是一个列表,所以才能用[]提取其中的元素。其第一个元素是程序本身,sys.argv[0]表示代码本身文件路径,随后才依次是外部给予的参数。

pop() 函数用于移除列表中的一个元素(默认最后一个元素),并且返回该元素的值。

hash.hexdigest() 返回摘要,作为十六进制数据字符串值。

json.dumps()将一个Python数据结构转换为JSON对象,indent:参数根据数据格式缩进显示,读起来更加清晰,skipkeys:默认值是False,如果dict的keys内的数据不是python的基本类型(str,unicode,int,long,float,bool,None),设置为False时,就会报TypeError的错误。此时设置成True,则会跳过这类key 。

解题代码:

import json
data = {"filename": 'flag.txt',"hash": 'h',}
outbuf = json.dumps(data, sort_keys=True, indent=4)
cipher_pre=open('flag.txt.enc','rb').read()
for i in range(43):print(chr(cipher_pre[i]^ord(outbuf[i])))#得到key
key='n0t4=l4g'
for i in range(8):key+=key#使key足够长.
flag=''
for i in range(len(cipher_pre)):flag+=chr(ord(key[i])^cipher_pre[i])
print(flag)

运行得到:

{"filename": "flag.txt","hash": "2f98b8afa014bf955533a3e72cee0417413ff744e25f2b5b5838f5741cd69547","plaintext": "CTF{plz_dont_r0ll_ur_own_crypto}"
}

答案

flag{plz_dont_r0ll_ur_own_crypto}

[BSidesSF2020]decrypto-1相关推荐

  1. [BSidesSF2020]haystack

    [BSidesSF2020]haystack 题目 This vendor claims they have figured out a way to preserve the integrity a ...

  2. [BSidesSF2020]decrypto-2

    [BSidesSF2020]decrypto-2 题目 Kerckhoffs's principle states that "A cryptosystem should be secure ...

  3. 华人小哥开发“黑话”数据集,AI:你连dbq都不知道,xswl!| NAACL 2021

    点击上方"视学算法",选择加"星标"或"置顶" 重磅干货,第一时间送达 子豪 发自 凹非寺 量子位 报道 | 公众号 QbitAI 提到&q ...

  4. 图解分析一个dNet进销存软件

    该源码下载自 http://www.onlinedown.net/soft/43299.htm 首先安装: 看下它的数据库:在sql server 2008中附加: 顺带复习sql server的连接 ...

  5. wifi定位算法 java_记一次APP的so层算法逆向(七)

    " 前言:初学逆向 请多多指教 好累 感觉每天这样肝 人有点受不了了..." 学习到的内容 - 1.新学习到IDA的一些分析时候的小技巧 2.算法还原代码实现的练习(有个参数没有分 ...

  6. 设计模式理解:装饰模式Decorator

    装饰模式,又称包装器(wrapper),该模式的使用场景是,动态的给对象扩展一些额外的职责.职责即功能,所谓"动态"表示可以任意搭配我想要的功能,功能调用的先后顺序也可以任意设置. ...

  7. 逆向so_记一次APP的so层算法逆向(七)

    " 前言:初学逆向 请多多指教 好累 感觉每天这样肝 人有点受不了了..." 学习到的内容 - 1.新学习到IDA的一些分析时候的小技巧 2.算法还原代码实现的练习(有个参数没有分 ...

  8. All your files have been encrypted

    小弟的姑姑家的老板收银的电脑被黑客黑了,我来解决一下,小孩玩游戏玩电脑中的病毒, 方法很多种,仅供参考. 问题邮件截图: 参考方式: 方法一:给对方钱,一般比较贵,还不如重装系统.哈哈. 方法二:下载 ...

  9. 加密和解密算法的兩個實現

    最近一段時間,集團加強了資安方面的管理,所有敏感的配置字節都必須經過加密處理,把最近用到的幾個加解密類整理了一下,以做備忘. 其實這兩個類實現的方法差不多,只是有些細微區別: 對稱加密演算法類 Sym ...

最新文章

  1. Microbiome:在人工肠道中建立动态线性模型指导设计和分析微生物组研究
  2. python点的作用-Python中*和**的作用(课堂小结)
  3. Linux reboot指令
  4. Redisson框架快速入门
  5. aws s3仅允许cloudfront访问_初创公司如何用AWS搭建高扩展性架构
  6. Java删除指定值结点[递归]图解
  7. WEB程序调用客户端程序
  8. 关于php车服务论文,「PHP」行车服务app后端代码简析
  9. [Guava源码日报](8)ImmutableCollection
  10. HDU1420 Prepared for New Acmer【快速模幂】
  11. SQL Where子句
  12. linux系统管理常用命令--top
  13. 【Linux_Fedora_应用系列】_1_如何安装音乐播放器和mp3解码
  14. cocos-2d iphone入门(二) cocos2d源代码生成查询文档
  15. AutoJs实战教程---刷宝短视频
  16. 论如何写一份好的前端面试简历
  17. windows10将耳机当作麦克风
  18. 佛寺风飘飘,塔上幡摇摇
  19. python课程设计,学了python后你可以做的案例(词云,折线图,饼图…)
  20. vue实战之在线翻译项目

热门文章

  1. 展望数据中心市场未来十年发展趋势
  2. 单片机彩灯移动实验_单片机课程设计彩灯实验.doc
  3. dz seo插件_河北seo优化网络推广报价单
  4. CSDN粉丝解答:六月份第二期精选——简单bug处理、资料索取、编程系统设计等
  5. ML之FE:基于BigMartSales数据集利用Featuretools工具(1个dataframe表结构切为2个Entity表结构)实现自动特征工程之详细攻略
  6. 成功解决AttributeError: module ‘seaborn‘ has no attribute ‘lvplot‘
  7. 成功解决Could not install packages due to an EnvironmentError: [WinError 5] 拒绝访问。: 'f:\\program files\\p
  8. 成功解决absl.flags._exceptions.IllegalFlagValueError: flag --train_size=inf: Expect argument to be a str
  9. DL之DNN之BP:神经网络算法简介之BP算法/GD算法之不需要额外任何文字,只需要八张图讲清楚BP类神经网络的工作原理
  10. page分页问题,根据页码获取对应页面的数据,接口调用