1
0

signature.py 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. import base64
  2. import hashlib
  3. import hmac
  4. import textwrap
  5. key = bytes.fromhex("943b421c9eb07c830af81030552c86009268de4e532ba2ee2eab8247c6da0881")
  6. salt = bytes.fromhex("520f986b998545b4785e0defbc4f3c1203f22de2374a3d53cb7a7fe9fea309c5")
  7. url = b"http://img.example.com/pretty/image.jpg"
  8. encoded_url = base64.urlsafe_b64encode(url).rstrip(b"=").decode()
  9. # You can trim padding spaces to get good-looking url
  10. encoded_url = '/'.join(textwrap.wrap(encoded_url, 16))
  11. path = "/{resize}/{width}/{height}/{gravity}/{enlarge}/{encoded_url}.{extension}".format(
  12. encoded_url=encoded_url,
  13. resize="fill",
  14. width=300,
  15. height=300,
  16. gravity="no",
  17. enlarge=1,
  18. extension="png",
  19. ).encode()
  20. digest = hmac.new(key, msg=salt+path, digestmod=hashlib.sha256).digest()
  21. protection = base64.urlsafe_b64encode(digest).rstrip(b"=")
  22. url = b'/%s%s' % (
  23. protection,
  24. path,
  25. )
  26. print(url.decode())
  27. # without / in url
  28. # /_PQ4ytCQMMp-1w1m_vP6g8Qb-Q7yF9mwghf6PddqxLw/fill/300/300/no/1/aHR0cDovL2ltZy5leGFtcGxlLmNvbS9wcmV0dHkvaW1hZ2UuanBn.png
  29. # with / in url
  30. # /MlF9VpgaHqcmVK3FyT9CTJhfm0rfY6JKnAtxoiAX9t0/fill/300/300/no/1/aHR0cDovL2ltZy5l/eGFtcGxlLmNvbS9w/cmV0dHkvaW1hZ2Uu/anBn.png