Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import hashlib
- class VisaPVV:
- key_dictionary = {
- 1: (
- bytes.fromhex("4261736536344B657941"),
- bytes.fromhex("4261736536344B657942")
- )
- }
- @staticmethod
- def get_tsp(pan, pvki, pin):
- return pan[-12:-1] + str(pvki) + pin
- @staticmethod
- def generate_pvv(pan, pvki, pin):
- if pvki not in VisaPVV.key_dictionary:
- raise ValueError(f"No keys for PVKI {pvki}")
- tsp = VisaPVV.get_tsp(pan, pvki, pin)
- keys = VisaPVV.key_dictionary[pvki]
- combined_key = keys[0] + keys[1]
- tsp_bytes = tsp.encode('utf-8')
- result = hashlib.md5(tsp_bytes).digest()
- hex_result = result.hex()
- decimalization = ''.join([c if c.isdigit() else str(int(c, 16) - 10) for c in hex_result])
- pvv = decimalization[:4]
- print(f"Значення PVV дорівнює чотирьом лівим цифрам отриманого результату: {pvv}")
- return pvv
- @staticmethod
- def verify_pin(pan, pvki, pin, pvv):
- generated_pvv = VisaPVV.generate_pvv(pan, pvki, pin)
- is_valid = generated_pvv == pvv
- pin_verification = "Пін-код вірний" if is_valid else "Пін-код невірний"
- print(pin_verification)
- return is_valid
- if __name__ == "__main__":
- pan = "1234567890123445"
- pvki = 1
- pin = "9090"
- pvv = VisaPVV.generate_pvv(pan, pvki, pin)
- print(f"Generated PVV: {pvv}")
- VisaPVV.verify_pin(pan, pvki, pin, pvv)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement