2019-11-26

NCTF中密码学的学习

keyboard

几个wp中用到的函数

.split(' ')
split(分隔符,分割几次)从左向右寻找,以某个元素为中心将左右分割成两个元素并放入列表中,该分隔符丢弃(此处分隔元素为' ')

扩展
rsplit(分隔符,分割几次)从右向左寻找,以某个元素为中心将左右分割成两个元素并放入列表中,该分隔符丢弃
splitlines(分隔符,分割几次)根据换行符(\n)分割并将元素放入列表中,该分隔符丢弃

len()
Python len() 方法返回对象(字符、列表、元组等)长度或项目个数。

index() 函数用于从列表中找出某个值第一个匹配项的索引位置。
list.index(x[, start[, end]])
参数
x-- 查找的对象。
start-- 可选,查找的起始位置。
end-- 可选,查找的结束位置。
①自己用vs code编写实现

杂项

键盘侠

看了wp终于知道自己hxd总是只读不能写入的原因了,这次终于学会在属性中取消了只读~
学到了两个分离文件的方法,binwalk和foremost
1.binwalk操作指令
binwalk -e 用于按照定义的配置文件中的提取方法从固件中提取探测到的文件系统。
dd if=(原文件名) of=(提取文件名)skip=数据地址(从输入文件开头跳过x个块后再开始复制) bs=1(设置每次读写块的大小为1字节)
(分离文件记得放在binwalk)
2.foremost
指令 foremost+文件名
foremost会自动输出一个output文件夹

②但是我的这两种分离keyboard图片都可以分离出doc的文字,而没有需要解密的密文。。重点标记一下有待解决的问题。

3.base85
原来python3中也可以base解码,引入base64模块

base64原理
字符选用了"A-Z、a-z、0-9、+、/" 64个可打印字符,这是标准的Base64协议规定。
第一步,将待转换的字符串每三个字节分为一组,每个字节占8bit,那么共有24个二进制位。
第二步,将上面的24个二进制位每6个一组,共分为4组。
第三步,在每组前面添加两个0,每组由6个变为8个二进制位,总共32个二进制位,即四个字节。
第四步,根据Base64编码对照表(见下图)获得对应的值。

base64.PNG

出处:https://blog.csdn.net/wo541075754/article/details/81734770

若不足三字节,在有数据的字节处用0补齐,而没有数据时则用=填充,当一串编码以=或==结尾,就很有可能是base64加密的

base64是每6个bit映射为一个ascii字符,用64个ascii字符来表示。
每3个字节编码后对应4个字符,大小增加1/3
base85是每4个字节编码为一个85进制的表示,用85个ascii字符来表示。
每4个字节编码后对应5个字符,大小增加1/4
(③还是不太懂)

base85.PNG

故base编码的文本比原文本要长,base85编码也称为ascii85编码,其出现是在base64的基础上进一步压缩数据量。

对昨天的补充

rsa分解N的几种方式

使用pow函数来进行求解,而不能直接m**e % n,Python在处理此类运算进行了优化
1.如果N小于512bit,可以直接用本地工具进行分解(④今天又是没装好yafu的一天)
2.如果N在768bit或者更高,可以使用factordb

低解密指数攻击

标志为e很大时
下面是推导过程


EF764B5EB70E3290202D2CC39634FA75.jpg

你可能感兴趣的:(2019-11-26)