Íme egy jelszóból kulcsot származtató, majd Fernet szimmetrikus titkosítást használó Python-program
-------
# Source - https://stackoverflow.com/a/73551491
# Posted by chuckx
# Retrieved 2026-09-19, License - CC BY-SA 4.0
#!/usr/bin/python
import base64
import secrets
from cryptography.fernet import Fernet
from cryptography.hazmat.primitives import hashes
from cryptography.hazmat.primitives.kdf.pbkdf2 import PBKDF2HMAC
KDF_ALGORITHM = hashes.SHA256()
KDF_LENGTH = 32
KDF_ITERATIONS = 120000
def encrypt(plaintext: str, password: str) -> (bytes, bytes):
# Derive a symmetric key using the passsword and a fresh random salt.
salt = secrets.token_bytes(16)
kdf = PBKDF2HMAC(
algorithm=KDF_ALGORITHM, length=KDF_LENGTH, salt=salt,
iterations=KDF_ITERATIONS)
key = kdf.derive(password.encode("utf-8"))
# Encrypt the message.
f = Fernet(base64.urlsafe_b64encode(key))
ciphertext = f.encrypt(plaintext.encode("utf-8"))
return ciphertext, salt
def decrypt(ciphertext: bytes, password: str, salt: bytes) -> str:
# Derive the symmetric key using the password and provided salt.
kdf = PBKDF2HMAC(
algorithm=KDF_ALGORITHM, length=KDF_LENGTH, salt=salt,
iterations=KDF_ITERATIONS)
key = kdf.derive(password.encode("utf-8"))
# Decrypt the message
f = Fernet(base64.urlsafe_b64encode(key))
plaintext = f.decrypt(ciphertext)
return plaintext.decode("utf-8")
def main():
password = "aStrongPassword"
message = "a secret message"
encrypted, salt = encrypt(message, password)
decrypted = decrypt(encrypted, password, salt)
print(f"message: {message}")
print(f"encrypted: {encrypted}")
print(f"decrypted: {decrypted}")
-----------
Fiók jelszó módositása
--------------------
import subprocess
import getpass
import os
import sys
PSPASSWD = r"C:\Sysinternals\PsPasswd.exe"
def change_password(username):
if not os.path.isfile(PSPASSWD):
print(f"Hiba: nem található:\n{PSPASSWD}")
return False
new_password = getpass.getpass(
f"Új jelszó a(z) {username} felhasználóhoz: "
)
confirm_password = getpass.getpass(
"Új jelszó ismét: "
)
if new_password != confirm_password:
print("A két jelszó nem egyezik.")
return False
if not new_password:
print("Üres jelszó használata nem engedélyezett.")
return False
command = [
PSPASSWD,
username,
new_password
]
try:
result = subprocess.run(
command,
capture_output=True,
text=True
)
print("Kimenet:")
print(result.stdout)
if result.stderr:
print("Hiba:")
print(result.stderr)
if result.returncode == 0:
print("A jelszó módosítása sikeres.")
return True
print(
f"PsPasswd hibakód: {result.returncode}"
)
return False
except Exception as e:
print(f"Programhiba: {e}")
return False
if __name__ == "__main__":
print("=== PsPasswd Python vezérlő ===")
print()
username = input(
"Melyik helyi Windows-fiók jelszavát módosítsuk? "
).strip()
if not username:
print("Nem adtál meg felhasználónevet.")
sys.exit(1)
change_password(username)
-------------------
Visszafejtés
-------------
decrypted = decrypt(encrypted, password, salt)
--------
A program újra előállítja a kulcsot:
password + salt ↓ PBKDF2-HMAC-SHA256 ↓ ugyanaz a kulcs ↓ Fernet.decrypt() ↓ eredeti szöveg-------------message: a secret message encrypted: b'gAAAAA...' decrypted: a secret message-------------Ha PBKDF2 + Fernet alapú, jelszóvezérelt szimmetrikus titkosítási algoritmust átírjuk;import getpass password = getpass.getpass("Jelszó: ")akkor nem jelenik mega monitoron!
Nincsenek megjegyzések:
Megjegyzés küldése