Advertisement
Guest User

Untitled

a guest
Sep 2nd, 2017
138
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.79 KB | None | 0 0
  1. __doc__ = """Module criptyage ci-dessous :"""
  2. __always_supported = ('md5', 'sha1', 'sha224', 'sha256', 'sha384', 'sha512')
  3.  
  4. algorithms_guaranteed = set(__always_supported)
  5. algorithms_available = set(__always_supported)
  6.  
  7. algorithms = __always_supported
  8.  
  9. __all__ = __always_supported + ('new', 'algorithms_guaranteed',
  10. 'algorithms_available', 'algorithms',
  11. 'pbkdf2_hmac')
  12.  
  13.  
  14. def __get_builtin_constructor(name):
  15. try:
  16. if name in ('SHA1', 'sha1'):
  17. import _sha
  18. return _sha.new
  19. elif name in ('MD5', 'md5'):
  20. import _md5
  21. return _md5.new
  22. elif name in ('SHA256', 'sha256', 'SHA224', 'sha224'):
  23. import _sha256
  24. bs = name[3:]
  25. if bs == '256':
  26. return _sha256.sha256
  27. elif bs == '224':
  28. return _sha256.sha224
  29. elif name in ('SHA512', 'sha512', 'SHA384', 'sha384'):
  30. import _sha512
  31. bs = name[3:]
  32. if bs == '512':
  33. return _sha512.sha512
  34. elif bs == '384':
  35. return _sha512.sha384
  36. except ImportError:
  37. pass
  38.  
  39. raise ValueError('unsupported hash type ' + name)
  40.  
  41.  
  42. def __get_openssl_constructor(name):
  43. try:
  44. f = getattr(_hashlib, 'openssl_' + name)
  45. f()
  46. return f
  47. except (AttributeError, ValueError):
  48. return __get_builtin_constructor(name)
  49.  
  50.  
  51. def __py_new(name, string=''):
  52. return __get_builtin_constructor(name)(string)
  53.  
  54.  
  55. def __hash_new(name, string=''):
  56. try:
  57. return _hashlib.new(name, string)
  58. except ValueError:
  59. return __get_builtin_constructor(name)(string)
  60.  
  61.  
  62. try:
  63. import _hashlib
  64. new = __hash_new
  65. __get_hash = __get_openssl_constructor
  66. algorithms_available = algorithms_available.union(
  67. _hashlib.openssl_md_meth_names)
  68. except ImportError:
  69. new = __py_new
  70. __get_hash = __get_builtin_constructor
  71.  
  72. for __func_name in __always_supported:
  73. try:
  74. globals()[__func_name] = __get_hash(__func_name)
  75. except ValueError:
  76. import logging
  77. logging.exception('code for hash %s was not found.', __func_name)
  78.  
  79.  
  80. try:
  81. from _hashlib import pbkdf2_hmac
  82. except ImportError:
  83. import binascii
  84. import struct
  85.  
  86. _trans_5C = b"".join(chr(x ^ 0x5C) for x in range(256))
  87. _trans_36 = b"".join(chr(x ^ 0x36) for x in range(256))
  88.  
  89. def pbkdf2_hmac(hash_name, password, salt, iterations, dklen=None):
  90. if not isinstance(hash_name, str):
  91. raise TypeError(hash_name)
  92.  
  93. if not isinstance(password, (bytes, bytearray)):
  94. password = bytes(buffer(password))
  95. if not isinstance(salt, (bytes, bytearray)):
  96. salt = bytes(buffer(salt))
  97. inner = new(hash_name)
  98. outer = new(hash_name)
  99. blocksize = getattr(inner, 'block_size', 64)
  100. if len(password) > blocksize:
  101. password = new(hash_name, password).digest()
  102. password = password + b'\x00' * (blocksize - len(password))
  103. inner.update(password.translate(_trans_36))
  104. outer.update(password.translate(_trans_5C))
  105.  
  106. def prf(msg, inner=inner, outer=outer):
  107. icpy = inner.copy()
  108. ocpy = outer.copy()
  109. icpy.update(msg)
  110. ocpy.update(icpy.digest())
  111. return ocpy.digest()
  112.  
  113. if iterations < 1:
  114. raise ValueError(iterations)
  115. if dklen is None:
  116. dklen = outer.digest_size
  117. if dklen < 1:
  118. raise ValueError(dklen)
  119.  
  120. hex_format_string = "%%0%ix" % (new(hash_name).digest_size * 2)
  121.  
  122. dkey = b''
  123. loop = 1
  124. while len(dkey) < dklen:
  125. prev = prf(salt + struct.pack(b'>I', loop))
  126. rkey = int(binascii.hexlify(prev), 16)
  127. for i in xrange(iterations - 1):
  128. prev = prf(prev)
  129. rkey ^= int(binascii.hexlify(prev), 16)
  130. loop += 1
  131. dkey += binascii.unhexlify(hex_format_string % rkey)
  132.  
  133. return dkey[:dklen]
  134. del __always_supported, __func_name, __get_hash
  135. del __py_new, __hash_new, __get_openssl_constructor
  136. new = md5
  137. blocksize = 1
  138. digest_size = 16
  139. def sumFileMD5(filePath):
  140. fichier = open(filePath, 'r')
  141. c = md5()
  142. while 1:
  143. try:
  144. d = fichier.next()
  145. c.update(d)
  146. except: break
  147. fichier.close()
  148. return c.hexdigest()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement