Advertisement
Guest User

Untitled

a guest
Mar 21st, 2019
116
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.47 KB | None | 0 0
  1. from Cryptodome.Cipher import AES
  2.  
  3. def decrypt_aes_ecb(data, key):
  4. cipher = AES.new(key, AES.MODE_ECB)
  5. return cipher.decrypt(data)
  6.  
  7. def encrypt_aes_ecb(data, key):
  8. cipher = AES.new(key, AES.MODE_ECB)
  9. return cipher.encrypt(data)
  10.  
  11. def pkcs7(val, block_size=16):
  12. remaining = block_size - len(val) % block_size
  13. if remaining == block_size:
  14. remaining = 16
  15. ret = val + chr(remaining).encode() * remaining
  16.  
  17. return ret
  18.  
  19. def unpkcs7(val, block_size=16):
  20. pad_amount = val[-1]
  21. if pad_amount == 0:
  22. raise Exception
  23. for i in range(len(val) - 1, len(val) - (pad_amount + 1), -1):
  24. if val[i] != pad_amount:
  25. raise Exception
  26. return val[:-pad_amount]
  27.  
  28. def decrypt_aes_cbc(data, key, iv = b'x00' * 16, pad=True):
  29. prev_chunk = iv
  30.  
  31. decrypted = []
  32.  
  33. for i in range(0, len(data), 16):
  34. chunk = data[i : i + 16]
  35. decrypted += xor(decrypt_aes_ecb(chunk, key), prev_chunk)
  36. prev_chunk = chunk
  37.  
  38. if pad:
  39. return unpkcs7(bytes(decrypted))
  40. return bytes(decrypted)
  41.  
  42. def encrypt_aes_cbc(data, key, iv = b'x00' * 16, pad=True):
  43. if pad:
  44. padded = pkcs7(data)
  45. else:
  46. padded = data
  47.  
  48. prev_chunk = iv
  49.  
  50. encrypted = []
  51.  
  52. for i in range(0, len(padded), 16):
  53. chunk = padded[i : i + 16]
  54. encrypted_block = encrypt_aes_ecb(xor(chunk, prev_chunk), key)
  55. encrypted += encrypted_block
  56. prev_chunk = encrypted_block
  57.  
  58. return bytes(encrypted)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement