我用 python 创建了一个脚本来从网页中抓取某些字段。当我在脚本中使用这个link时,它会生成json格式的所有数据,我可以相应地解析它。
import requests
link = 'https://api-emis.kemenag.go.id/v1/institutions/pontren/public/identity/K1hOenRreVRmaWYwSGVzcERWVFpjZz09'
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36'
}
with requests.Session() as s:
s.headers.update(headers)
res = s.get(link)
container = res.json()['results']
account_bank_holder = container['account_bank_holder']
organizer_name = container['organizer_name']
print((account_bank_holder,organizer_name))
但是,问题是我无法弄清楚链接末尾的这部分
K1hOenRreVRmaWYwSGVzcERWVFpjZz09
来自哪里。
这就是我找到链接的方式:
您现在应该已经有了链接,以我上面提到的部分结尾。
问题:最终链接末尾类似
K1hOenRreVRmaWYwSGVzcERWVFpjZz09
的部分来自哪里?
因此,开发人员使用了 aes 加密和 Base64 编码。
import base64
from cryptography.hazmat.primitives.ciphers import Cipher, algorithms, modes
from cryptography.hazmat.backends import default_backend
from cryptography.hazmat.primitives import padding
def aes_encrypt_cbc(plaintext: str) -> str:
secret_key = b'a2c36eb2w1em50d6665dc5d61a68b400'
base64_iv = "ZW1pc0Jhc2U2NElWa2V5cw=="
iv = base64.b64decode(base64_iv)
cipher = Cipher(algorithms.AES(secret_key), modes.CBC(iv), backend=default_backend())
encryptor = cipher.encryptor()
padder = padding.PKCS7(128).padder()
padded_plaintext = padder.update(plaintext.encode()) + padder.finalize()
ciphertext = encryptor.update(padded_plaintext) + encryptor.finalize()
return base64.b64encode(base64.b64encode(ciphertext).decode().encode()).decode()
institution_id = "175974"
encrypted_text = aes_encrypt_cbc(institution_id)
print("Encrypted: ", encrypted_text)
注意:初始化向量和密钥将来可能会改变。!