Sekuvo
العربية

مظروف → QR

تحوّل هذه الصفحة مظروف Sekuvo المشفَّر سلفًا إلى إطارات QR يستطيع هاتفك مسحها. لا تجري أي تشفير ولا تطلب سرًّا أبدًا: تنتج المظروف على جهازك الخاص، ولا يُلصق هنا إلا نص مشفَّر.

الطريق الأكثر تحفظًا يبقى aktar.html المنزَّل والمفتوح من قرصك الخاص. هذه الصفحة موجودة للحالة التي تشفّر فيها في طرفيتك ولا تحتاج إلا إلى عرض QR.

1 · أنتج المظروف على جهازك الخاص

يبني السكربت أدناه المظروف نفسه الذي يفتحه التطبيق (PBKDF2-HMAC-SHA256 · 310٬000 دورة + AES-256-GCM). احفظه باسم zarf-uret.py واقرأه قبل تشغيله — نحو ثلاثين سطرًا. ولّد كلمة المرور بدل اختلاقها؛ الأمر الأول يفعل ذلك.

# macOS / Linux
# generate a password (letters+digits, ~119 bits):
python3 -c "import secrets,string; print(''.join(secrets.choice(string.ascii_letters+string.digits) for _ in range(20)))"

pip3 install cryptography
python3 zarf-uret.py "Server SSH" > zarf.json   # paste the secret, then Ctrl-D
pbcopy < zarf.json                              # macOS; Linux: xclip -sel clip < zarf.json
# Windows (PowerShell)
# generate a password (letters+digits, ~119 bits):
python -c "import secrets,string; print(''.join(secrets.choice(string.ascii_letters+string.digits) for _ in range(20)))"

pip install cryptography
python zarf-uret.py "Server SSH" > zarf.json    # paste the secret, then Ctrl-Z + Enter
Get-Content zarf.json | Set-Clipboard
#!/usr/bin/env python3
# zarf-uret.py - reads the secret from stdin, writes a Sekuvo envelope to stdout.
# Usage: python3 zarf-uret.py "Title" > zarf.json   (paste the secret, then Ctrl-D)
# Requires: pip install cryptography
import sys, os, json, time, base64, hashlib, getpass
from cryptography.hazmat.primitives.ciphers.aead import AESGCM

title = sys.argv[1] if len(sys.argv) > 1 else "Transfer"
secret = sys.stdin.read()
# The app refuses entries above 256 KB; say so here instead of after the scan.
assert len(secret.encode()) <= 256 * 1024, "secret is over 256 KB, the app will not import it"
password = getpass.getpass("Envelope password (ASCII, generated): ")
assert password.isascii() and len(password) >= 8, "ASCII and at least 8 characters"

now = int(time.time() * 1000)
payload = json.dumps({"entries": [{
    "type": "NOTE", "title": title,
    "createdAt": now, "updatedAt": now, "quick": False,
    "data": {"notes": secret},
}]}, ensure_ascii=False)

salt = os.urandom(16)
key = hashlib.pbkdf2_hmac("sha256", password.encode(), salt, 310_000, 32)
iv = os.urandom(12)
blob = iv + AESGCM(key).encrypt(iv, payload.encode(), None)
print(json.dumps({
    "app": "vault", "version": 1,
    "kdf": {"algo": "PBKDF2WithHmacSHA256", "iterations": 310_000,
            "salt": base64.b64encode(salt).decode()},
    "cipher": "AES-256-GCM",
    "data": base64.b64encode(blob).decode(),
}))

الصق السرّ في مدخل السكربت بدل كتابته في سطر الأوامر — هكذا لا يستقر أبدًا في سجل الصدفة.

2 · الصق المظروف

3 · على الهاتف

Sekuvo → + → استيراد عبر QR → امسح الإطارات → أدخل كلمة المرور نفسها → الإضافة إلى الموجود.

← العودة إلى sekuvo.com