reverse之密码算法
1.base64编码
加密原理
base64加密流程,将三个八字节数据为一组合成一个24位的数据,再把这24位重新拆分成4组6位为一组的数据,将6位一组的数据作为字母表下标,因此重新生成编码
字母表如下:
ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/
若加密字符长度求余3为1 ,则将其余下的一位用0补至12位,重新生成两个字符最后再加上两个’=’
若加密字符长度求余3为2,则将其余下的两位用0补至18位,重新生成三个字符最后再加上一个’=’
例如字符串’1’编码后
'1’转换为二进制0011 0001 前6位为0011 00 对应着index为12 为字符M 最后两位01补齐后为010000 index为16
对应着Q 所以’1’的base64编码为MQ==
因此base64长度若原长度能够被3整除,则加密长度为原长度的4/3倍
否则为原长度的4/3倍+4
'12’的字符串编码?
base64 In CTF
easy Base64
提示:简单的base64
1 | import base64 |
changed Base64
提示:字母表变换
1 |
|
得到结果Ym96amJGdlE0LzFUMWw1aDRtV0UxVkM9进行base64解密得到结果bozjbFvQ4/1T1l5h4mWE1VC=
再换表解密得到结果
1 | import binascii |
2.RC4加密
加密原理
初始化长度为256的S盒。第一个for循环将0到255的互不重复的元素装入S盒。第二个for循环根据密钥打乱S盒。
1 | for i from 0 to 255 |
下面i,j是两个指针。每收到一个字节,就进行while循环。通过一定的算法((a),(b))定位S盒中的一个元素,并与输入字节异或,得到k。循环中还改变了S盒(©)。如果输入的是明文,输出的就是密文;如果输入的是密文,输出的就是明文。
1 | i := 0 |
RC4 in CTF
题目RC4&BASE64
首先RC4解密
1 |
|
得到结果ZeptZ3l5UHQra25nd19yYzMrYR5wX2Jtc2P2VF9gYNM9
接着变种base64解密
1 | import binascii |
3.TEA系列(微型加密算法)
特征
含有Golden Ratio=0x9E3779B9
密钥长度为16byte(128位)
TEA
1 |
|
XTEA
1 |
|
XXTEA
1 |
|
TEA in CTF
例题:Tea相关
认清三种TEA加密
解密代码
1 |
|
4.SM4
国密SM4(无线局域网SMS4)算法, 一个分组算法, 分组长度为128bit, 密钥长度为128bit(长度为16位)
特征
- 系统参数FK 0xA3B1BAC6 0x56AA3350 0x677D9197 0xB27022DC
- S盒
SM4 in CTF
找到关键点判断SM4:解密
1 | from pysm4 import encrypt, decrypt |
5.MD5
特征
5个初始变量
1 | var int h0 := 0x67452301 |
MD5 in ctf
MD5解密
6.RSA
简介
RSA加密算法是一种非对称加密算法,在公开密钥加密和电子商业中被广泛使用
加密原理
- 公开密钥 n,e
- m为原信息
- c为加密信息
- d为解密密钥
加密过程:(m^e) mod n=c
解密过程:(c^d) mod n=m
RSA in CTF
利用gmpy2库解方程组
1 | import gmpy2 |