Ver Mensaje Individual
  #1 (permalink)  
Antiguo 26/11/2018, 06:43
sk0rpi0n
 
Fecha de Ingreso: julio-2009
Mensajes: 121
Antigüedad: 15 años, 3 meses
Puntos: 1
Encriptacion Contraseña

Buenas, estoy trasladando un sistema de python a php y estoy atascado en la parte del registro y encriptación de claves.

El resto del sistema pude pasarlo sin problemas y solo me falta esto... como nunca use python se me complica...

Necesitaría saber como pasar esta parte a PHP es donde encripta la contraseña de la cuenta creada:

Código:
import hashlib
import hmac
import base64
import binascii
import secrets

class Hasher:
	algorithm = None
	separator = '$'
	
	@classmethod
	def encode(cls, password, salt = None, *stuff):
		assert password is not None
		if not salt:
			salt = secrets.token_hex(10)
		assert cls.separator not in salt
		(hash, *stuff) = cls._encode_impl(password, salt, *stuff)
		hash = base64.b64encode(hash).decode('ascii').strip()
		return cls.separator.join([cls.algorithm] + stuff + [salt, hash])
	
	@classmethod
	def extract_salt(cls, encoded):
		try: (*_, salt, _) = encoded.split(cls.separator)
		except ValueError: return None
		return salt
	
	@classmethod
	def verify(cls, password, encoded):
		try: (algorithm, *stuff, salt, hash) = encoded.split(cls.separator)
		except ValueError: return False
		
		try: hasher = cls._HASHERS[algorithm]
		except KeyError: return False
		
		assert algorithm == hasher.algorithm
		encoded_2 = hasher.encode(password, salt, *stuff)
		return hmac.compare_digest(encoded, encoded_2)
	
	_HASHERS = {}

class PBKDF2PasswordHasher(Hasher):
	algorithm = 'pbkdf2_sha256'
	iterations = 24000
	
	@classmethod
	def _encode_impl(cls, password, salt, iterations = None):
		if not iterations:
			iterations = cls.iterations
		iterations = int(iterations)
		hash = hashlib.pbkdf2_hmac('sha256', password.encode(), salt.encode(), iterations, None)
		return (hash, str(iterations))
Hasher._HASHERS[PBKDF2PasswordHasher.algorithm] = PBKDF2PasswordHasher

class MD5PasswordHasher(Hasher):
	algorithm = 'md5'
	digest = hashlib.md5
	
	@classmethod
	def _encode_impl(cls, password, salt):
		md5 = hashlib.md5()
		md5.update((salt + password).encode('utf-8'))
		return (md5.digest(),)
	
	@classmethod
	def verify_hash(cls, hash_1, encoded):
		try: (_, _, hash) = encoded.split(cls.separator)
		except ValueError: return False
		hash = binascii.hexlify(base64.b64decode(hash)).decode('ascii')
		return hmac.compare_digest(hash_1, hash)
Hasher._HASHERS[MD5PasswordHasher.algorithm] = MD5PasswordHasher

hasher = PBKDF2PasswordHasher
hasher_md5 = MD5PasswordHasher
este es un ejemplo de la clave "123456"

pbkdf2_sha256$24000$d3bda36e23c8e4c62ccb$jjHg3zGe+ Gdq45Ol0kkXoChJuIyfzEfnxiLqctjRAVQ=

Última edición por sk0rpi0n; 26/11/2018 a las 06:50