import hashlib
import base64
def md5(data: bytes)-> str:
m = hashlib.md5(data)return m.hexdigest()
def sha256(data: bytes)-> str:
m = hashlib.sha256(data)return m.hexdigest()if __name__ =='__main__':
message_hex =input("input message as a hex string: ")
message_bytes = bytes.fromhex(message_hex)
message_md5 =md5(message_bytes)
message_base64 = base64.b64encode(bytes.fromhex(message_md5))print("MD5 digest of the input:")print(message_md5)print(message_base64.decode("utf-8"),"\n")
message_sha256 =sha256(bytes.fromhex(message_hex))
message_base64 = base64.b64encode(bytes.fromhex(message_sha256))print("SHA256 digest of the input:")print(message_sha256)print(message_base64.decode("utf-8"))
import hashlib
import random
if __name__ =='__main__':
password =input("input the password as a text string:")
password_bytes = password.encode("utf-8")
salt =input("input the salt array:")
salt_hex = bytes.fromhex(salt)
data = hashlib.scrypt(password_bytes, salt=salt_hex, n=4, r=8, p=16)print(data.hex())
from __future__ import annotations
from typing import Dict
import random
import hashlib
import getpass
database: Dict[str, UserPassword]=dict()classUserPassword:
def __init__(self):
self.username: str =''
self.password_hash: bytes = b''
self.salt: bytes = b''
self.method: str ='scrypt'
def verify_password(self, password: str)->bool:#TODO
data = hashlib.scrypt(password.encode(), salt=self.salt, n=4, r=8, p=16)if data == self.password_hash:return True
else:return False
def database_add_item(user: UserPassword)-> None:if user.username in database:
raise Exception('User {} already exists.'.format(user.username))
database[user.username]= user
def login_user(username: str, password_plaintext: str)->bool:if username not in database:
raise Exception('User {} does not exist.'.format(username))return database[username].verify_password(password_plaintext)
def register_user(username: str, password_plaintext: str)-> None:#TODO
salt ="".join([random.choice("0123456789ABCDEF")for i in range(20)])
salt = bytes.fromhex(salt)
password_hash = hashlib.scrypt(password_plaintext.encode(), salt=salt, n=4, r=8, p=16)
user =UserPassword()
user.username = username
user.password_hash = password_hash
user.salt = salt
database_add_item(user)if __name__ =='__main__':while True:try:print('Usage:')print('\tR - register a new user')print('\tL - login with an existing user')print('\tQ - exit')print('')
command: str =input('Input command:')if command =='Q':exit(0)
elif command =='R'or command =='L':
username: str =input('Input username:')#password: str = getpass.getpass('Input password:') # will not work properly for PyCharm, IDLE, etc.
password: str =input('Input password:')if command =='R':register_user(username, password)print('User created successfully.')
elif command =='L':
login_valid:bool=login_user(username, password)if login_valid:print('User logged in successfully.')else:print('Password verification failed. Can not logged in.')else:
assert False
else:
raise Exception('Invalid command.')
except Exception as e:print('Error: {}'.format(e))