totp

Run Settings
LanguagePython
Language Version
Run Command
import hmac import hashlib import binascii import time def getTimeSteps(timePeriod): unix_time = int(time.time()) #Рахуємо кількість часових проміжків timeSteps = unix_time // timePeriod #Переводимо значення проміжків в шістнадцятковий формат hexTimeSteps = hex(timeSteps).upper() #прибираємо перші 2 непотрібні символи hexTimeSteps = hexTimeSteps[2:] # while len(hexTimeSteps) < 16: hexTimeSteps = '0' + hexTimeSteps return hexTimeSteps # generating sha256 hex string -> splitting it into hex bytes -> making offset -> generating 32 bytes totp -> cutting it into 6 digit number def generateTOTP(key: str, timeSteps: str, digits): #генерація хеш значення sha256Hash =bytes.fromhex((hmac.new( bytes(binascii.unhexlify(key)), msg=bytes(binascii.unhexlify(timeSteps)), digestmod=hashlib.sha256 ).hexdigest().upper())) #розрахунок значення зсуву offset = sha256Hash[31] & 0xF #розрахунок одноразового пароля binary = (((sha256Hash[offset] & 0x7F) << 24) | ((sha256Hash[offset + 1] & 0xFF) << 16) | ((sha256Hash[offset + 2] & 0xFF) << 8) | (sha256Hash[offset + 3] & 0xFF)) #скорочення пароля до потрібної кількості знаків totp = binary % pow(10, digits) #переведення значення в рядковий формат result = str(totp) while len(result) < digits: result = "0" + result return result def main(): shared_key = "3132333435363738393031323334353637383930313233343536373839303132" # time_t = " 00000000023523ED" while True: #time_t = input() print(generateTOTP(shared_key, getTimeSteps(30), 6)) time.sleep(1) if __name__ == "__main__": main()
Editor Settings
Theme
Key bindings
Full width
Lines