Jche
qwqqqqqq

python字节流与字符串与aes解密函数

2021-12-09 0-1のpython

starts

最近在开始做normal系列的题目,前面了解过一些以后大体还是能够理解题目的意思,但在写脚本上面出现了很多困难,(代码力很重要),不会写脚本然后看了wp,结果wp是py2写的,会报错,语法也有一些不太一样的,让本就py很寄的我雪上加霜。。

上面的都是废话,主要写一写python字节流和字符串还有aes十分简便的带类型的解密。

字节流与字符串

在写脚本的时候遇到了hexstring与bytes的转换问题,于是根据指点去查了一下字节流与字符串的使用和区别。以下是资料:

Python 3最重要的新特性之一是对字符串和二进制数据流做了明确的区分。文本总是Unicode,由str类型表示,二进制数据则由bytes类型表示。Python 3不会以任意隐式的方式混用str和bytes,你不能拼接字符串和字节流,也无法在字节流里搜索字符串(反之亦然),也不能将字符串传入参数为字节流的函数(反之亦然)。

意思就是,不能够在字符串中拼接和存放bytes类型的数据,而字节流可以看作c语言中的数组,是不能与str混用的。

encode与decode

那如果需要将str与bytes转换,那么就需要用到encode()(编码)和decode()(解码)两种方法,实际就是编码与解码。这也是python少数比c语言麻烦的地方。在解码编码同时需要指明编码解码类型。编码和解码类型不一致会导致出现乱码。

1
2
b = a.encode('utf-8') #用utf-8编码集将a字符串编码为字节数组
b1 = b.decode('utf-8') #用utf-8编码集将变量b的字节数组解码成对应字符串

如果不编码直接使用字符串来转换成bytes类型会报错。

也可以直接构造bytes类型数据

1
B = b"abcd"

二进制序列类型

bytes是不可变的二进制格式字节数据,而bytearray是可变的二进制数据,即可以对其进行操作来改变其中的数据。

在题目中遇到了hexstring转为bytes类型的问题,帮我改脚本的师傅用的是long_to_bytes,使用的模块是from Crypto.Util import number。当然byte_to_long也同样在模块里。(这个模块需要pip装)

1
2
3
4
from Crypto.Util.number import bytes_to_long, long_to_bytes 
a = long_to_bytes(0x934d8706bed74cd6eea683c7be86b2eb)
print(a)
#结果为 b'\x93M\x87\x06\xbe\xd7L\xd6\xee\xa6\x83\xc7\xbe\x86\xb2\xeb'

经过查资料,使用binascii.b2a_hex()也可以实现同样的效果:

1
2
3
4
import binascii
a = binascii.a2b_hex(b'934d8706bed74cd6eea683c7be86b2eb')#必须是bytes类型
print(a)
#结果为 b'\x93M\x87\x06\xbe\xd7L\xd6\xee\xa6\x83\xc7\xbe\x86\xb2\xeb'

AES解密函数(含aes类型)

在解决标准aes解密时,网上搜到的脚本大多数都是很多废话一大长串,实在是非常看不懂,(主要还是我菜),wp提供了一个非常简单且带有aes加密类型的解密(太好了!)于是我去了解了一下这个解密函数的用法

1
2
3
from Crypto.Cipher import AES
aes = AES.new(key, AES.MODE_ECB) #key为密钥
flag = aes.decrypt(data) #data是需要解密的内容

这里的aes = AES.new(key, AES.MODE_ECB)中的ECB换成其他的类型也是成立的(CBC、ECB、CTR、OCF、CFB

END

弱类型我**&%¥%¥……¥#……,但是还要学……

Author: John Doe

Link: http://example.com/2021/12/09/python%E5%AD%97%E8%8A%82%E6%B5%81%E4%B8%8E%E5%AD%97%E7%AC%A6%E4%B8%B2/

Copyright: All articles in this blog are licensed under CC BY-NC-SA 3.0 unless stating additionally.

< PreviousPost
《逆向工程核心原理》-1
NextPost >
python request
CATALOG
  1. 1. starts
  2. 2. 字节流与字符串
  3. 3. encode与decode
  4. 4. 二进制序列类型
  5. 5. AES解密函数(含aes类型)
  6. 6. END