抖音api解密用户手机号

最近接触抖音开放平台,用户授权成功还是拿不到该用户的手机,需要再去解密下才能拿到手机号,说到这儿不免要吐槽了,这么大的公司咋就不能有个其他大公司的样,好歹有个自己的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') # 定义key值
self.mode = AES.MODE_CBC
self.bs = 16 # block size
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) # 这里的key 和IV 一样 ,可以按照自己的值定义
crypt = generator.encrypt(self.PADDING(text).encode('utf-8'))
crypted_str = base64.b64encode(crypt) #输出Base64
# crypted_str = binascii.b2a_hex(crypt) # 输出Hex
result = crypted_str.decode()
return result

# 解密
def decrypt(self, text):
# AES.new第三个参数正常应该传一个iv,一直的话都写key就行了
generator = AES.new(self.key, self.mode, self.key)
text += (len(text) % 4) * '='
decrpyt_bytes = base64.b64decode(text) #输出Base64
# decrpyt_bytes = binascii.a2b_hex(text) # 输出Hex
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也是字节码哟。再次尝试下,完美解密了吧。