· 6 years ago · Sep 27, 2019, 04:30 PM
1import base64
2
3from cryptography.hazmat.backends import default_backend
4from cryptography.hazmat.primitives.asymmetric import padding
5from cryptography.hazmat.primitives.serialization import load_pem_private_key
6from cryptography.hazmat.primitives.ciphers import Cipher, algorithms, modes
7
8def loadPem(absPath):
9 data = open(absPath).read()
10 return bytes(data, encoding='utf-8')
11
12def decrypt_pci_data(pci_data,
13 secret_key,
14 private_key = None,
15 private_key_path = None):
16
17 if private_key_path is not None and private_key is None:
18 private_key = loadPem(private_key_path)
19
20 defaultBackend = default_backend()
21 iv = b'\x00' * 16
22
23 pk = load_pem_private_key(data=private_key, backend=defaultBackend, password=None)
24 aesKey = pk.decrypt(base64.b64decode(secret_key), padding.PKCS1v15())
25
26 cipher = Cipher(algorithms.AES(aesKey), modes.CTR(iv), backend=defaultBackend)
27 decryptor = cipher.decryptor()
28 data = decryptor.update(base64.b64decode(pci_data)) + decryptor.finalize()
29
30 return data.decode('utf-8', 'ignore')
31
32x = decrypt_pci_data(
33pci_data="Pq7fmy/kQaIpuk1J3bx5psKDW1tcVVUdD3ugDC+YfFCPQlrXEG8jhCr2c8Uw9IkDYQncGW2Fv9OO1iqTVUfQyB7YaLFg92rsOQr3/mh+WfLH81lg7KS6RxZxwmZ6cA==",
34secret_key="Y072NTdvkFtC3cm0znnCmkDFiGnH2bDABF+G7xCqhb/gIxeFP9PIjqlre4ZhYtKMnFf/sUY/LUIKJWPgoSZ8J9MDtrB8O8wCjSOT5nx2J7yrwrA3GD4IN6/H9QkHLTzFRA7N9rOrhcGYQBoyFsEwuTaoFVzhBj6bqEtID7KL43Jk+fVgQrR5I+sNSKpWpwNJB3hfX1ByJTHGNVke/ixH1rzG6IRE32phnGLx3TOgQShCKmwXCzHEySfO9G2q2zICmp1X3GLLLCa4+uIhzbqF1DMCcMnJkOybkzbAlIkYuVZ9rRvHj56wp8w8Xo2Zz9FBz3nuluLCW1pctGTIyECwJwHjCa9AXB5VzbqlL8aRQBGaFyszDdaQPgYQqGXEyHWNx3PXYcFZ2Kt0BbGzUnxCzyikLfBXuM+vlT1zoes7CCKLIKraSmebyPvszLYVaWqijMC7DP70VDWPbmDrJ+CZ1LZwavZV9jIkd5mdn+YsdLOkmRUavaSP0FetXtzGeDvLqm+PZKdlkU7GEtPZ4fHOrfhgoSNLsKIOD7ZD4QtIIh41XOt8hTXalSg2xCO3Xqk1ozkN1ik3hce2OyPhSBPChn7w0mHuKvoVEpqG2JVMSHI2Y6D3Rv0YaVGmKl3WnPMSIcn99dRLOm5p8dL143pTkG1265EbrwO1g5K91R1YNc0=",
35private_key_path="./private_key.pem")
36
37print(x)