/
dandud132
/
Vita
Обзор
Документация
Войти
/
dandud132
/
Vita
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
source_code/secure.py
64 строки
3 KB
Dan
first_commit
03 апр 2026, 20:24
03 апр 2026, 20:24
a58368c
Код
Авторство
О чём код?
import os import base64 from cryptography.hazmat.primitives.ciphers.aead import AESGCM from cryptography.hazmat.primitives.kdf.pbkdf2 import PBKDF2HMAC from cryptography.hazmat.primitives import hashes from cryptography.exceptions import InvalidTag # 🔑 Фиксированная соль для детерминированного вывода ключа # ⚠️ Задайте свою уникальную строку и НИКОГДА не меняйте её после шифрования данных! FIXED_SALT = b"my_app_deterministic_salt_v1_2026" def derive_key(seed_phrase: str, salt: bytes = FIXED_SALT, iterations: int = 480000) -> bytes: """ Детерминированно выводит 32-байтный (256-бит) ключ из сид-фразы. Одинаковая фраза + одинаковая соль + одинаковые итерации = одинаковый ключ. """ kdf = PBKDF2HMAC( algorithm=hashes.SHA256(), length=32, # 256 бит salt=salt, iterations=iterations ) return kdf.derive(seed_phrase.encode("utf-8")) def encrypt_text(plaintext: str, key: bytes) -> str: """Шифрует текст. Nonce генерируется случайно при каждом вызове.""" aesgcm = AESGCM(key) nonce = os.urandom(12) # 96 бит, криптографически случайный ciphertext = aesgcm.encrypt(nonce, plaintext.encode("utf-8"), None) # Сохраняем nonce + ciphertext в base64 return base64.b64encode(nonce + ciphertext).decode("utf-8") def decrypt_text(encrypted_b64: str, key: bytes) -> str: """Расшифровывает текст. Ошибка при неверном ключе/данных.""" data = base64.b64decode(encrypted_b64) nonce, ciphertext = data[:12], data[12:] aesgcm = AESGCM(key) try: return aesgcm.decrypt(nonce, ciphertext, None).decode("utf-8") except InvalidTag: raise ValueError("Неверная сид-фраза или повреждённые данные.") # if __name__ == "__main__": # SEED = "correct horse phrase" # key = derive_key(SEED) # print(f"🔑 Ключ (hex): {key.hex()}\n") # # # 2. Шифруем # original = "Конфиденциальные данные: баланс = 1000 BTC" # encrypted = encrypt_text(original, key) # print(f"🔒 Зашифровано: {encrypted}") # # # 3. Расшифровываем (используем тот же вывод ключа) # try: # decrypted = decrypt_text(encrypted, key) # print(f"🔓 Расшифровано: {decrypted}") # except ValueError as e: # print(f"❌ Ошибка: {e}") #