Advertisement
Soverein

Untitled

Oct 11th, 2023
26
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.56 KB | None | 0 0
  1. import hashlib
  2.  
  3. class VisaPVV:
  4. key_dictionary = {
  5. 1: (
  6. bytes.fromhex("4261736536344B657941"),
  7. bytes.fromhex("4261736536344B657942")
  8. )
  9. }
  10.  
  11. @staticmethod
  12. def get_tsp(pan, pvki, pin):
  13. return pan[-12:-1] + str(pvki) + pin
  14.  
  15. @staticmethod
  16. def generate_pvv(pan, pvki, pin):
  17. if pvki not in VisaPVV.key_dictionary:
  18. raise ValueError(f"No keys for PVKI {pvki}")
  19.  
  20. tsp = VisaPVV.get_tsp(pan, pvki, pin)
  21. keys = VisaPVV.key_dictionary[pvki]
  22.  
  23. combined_key = keys[0] + keys[1]
  24.  
  25. tsp_bytes = tsp.encode('utf-8')
  26. result = hashlib.md5(tsp_bytes).digest()
  27.  
  28. hex_result = result.hex()
  29. decimalization = ''.join([c if c.isdigit() else str(int(c, 16) - 10) for c in hex_result])
  30.  
  31. pvv = decimalization[:4]
  32. print(f"Значення PVV дорівнює чотирьом лівим цифрам отриманого результату: {pvv}")
  33.  
  34. return pvv
  35.  
  36. @staticmethod
  37. def verify_pin(pan, pvki, pin, pvv):
  38. generated_pvv = VisaPVV.generate_pvv(pan, pvki, pin)
  39. is_valid = generated_pvv == pvv
  40.  
  41. pin_verification = "Пін-код вірний" if is_valid else "Пін-код невірний"
  42. print(pin_verification)
  43.  
  44. return is_valid
  45.  
  46. if __name__ == "__main__":
  47. pan = "1234567890123445"
  48. pvki = 1
  49. pin = "9090"
  50.  
  51. pvv = VisaPVV.generate_pvv(pan, pvki, pin)
  52. print(f"Generated PVV: {pvv}")
  53.  
  54. VisaPVV.verify_pin(pan, pvki, pin, pvv)
  55.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement