最近接触抖音开放平台,用户授权成功还是拿不到该用户的手机,需要再去解密下才能拿到手机号,说到这儿不免要吐槽了,这么大的公司咋就不能有个其他大公司的样,好歹有个自己的sdk不是。下面继续说解密的事情
文档中给出了醒目的提示解密手机号,使用Aes算法解密,并且贴心的给出了java/go/php的解密示例,我大python呢?还没亡呢。
抱着快速解决问题的方式问问竟然还活着的度娘吧,啪啪啪,python AES加解密结果还真多,尝试两个均已卒。
AES加密方式有五种:ECB, CBC, CTR, CFB, OFB
从安全性角度推荐CBC加密方法,本文介绍了CBC,ECB两种加密方法的python实现
python 在 Windows下使用AES时要安装的是pycryptodome 模块 pip install pycryptodome
python 在 Linux下使用AES时要安装的是pycrypto模块 pip install pycrypto
CBC加密需要一个十六位的key(密钥)和一个十六位iv(偏移量)
ECB加密不需要iv
总结下给大家整理了一个AES加解密类
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
| import base64 import binascii import re from Crypto.Cipher import AES class AESCBC: def __init__(self): self.key = 'msunsoftalphaicd'.encode('utf-8') self.mode = AES.MODE_CBC self.bs = 16 self.PADDING = lambda s: s + (self.bs - len(s) % self.bs) * chr(self.bs - len(s) % self.bs) def encrypt(self, text): generator = AES.new(self.key, self.mode, self.key) crypt = generator.encrypt(self.PADDING(text).encode('utf-8')) crypted_str = base64.b64encode(crypt) result = crypted_str.decode() return result def decrypt(self, text): generator = AES.new(self.key, self.mode, self.key) text += (len(text) % 4) * '=' decrpyt_bytes = base64.b64decode(text) meg = generator.decrypt(decrpyt_bytes) try: result = re.compile('[\\x00-\\x08\\x0b-\\x0c\\x0e-\\x1f\n\r\t]').sub('', meg.decode()) except Exception: result = '解码失败,请重试!' return result if __name__ == '__main__': a = AESCBC() print(a.encrypt('15115151515')) print(a.decrypt(a.encrypt('15115151515')))
|
成了吧?
抖音解密中我们只需要其中的解密部分就行了,需要注意的是,AES.new三个参数分别为秘钥、模式CBC、向量iv,记得iv也是字节码哟。再次尝试下,完美解密了吧。