Latest commit

History

22 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Cryptyrus – bannière du projet

Cryptyrus

Chiffrement et sauvegarde physique sécurisée sur papier. Tout se passe dans votre navigateur : aucune donnée (secret ou phrase de passe) ne quitte jamais l'appareil.


Présentation

Cryptyrus est une application web statique et autonome (une seule page index.html) permettant de :

  1. Chiffrer un secret (mots de passe, clés de récupération, informations sensibles…) et le matérialiser sous forme de QR code imprimable, protégé par une phrase de passe.
  2. Répartir un secret sur plusieurs feuilles grâce au partage de secret de Shamir (schéma k-parmi-n), sans phrase de passe : il faut réunir un nombre minimum de feuilles pour reconstituer le secret.
  3. Récupérer un secret en scannant un QR code (caméra) ou en collant les données manuellement.

Chaque feuille imprimée embarque également un programme de récupération autonome (HTML/JS auto-suffisant) permettant de retrouver le secret même sans accès à Cryptyrus, simplement en ouvrant le fichier dans un navigateur.


Fonctionnalités

  • Chiffrement fort : AES‑256‑GCM, dérivation de clé PBKDF2‑SHA‑256 (600 000 itérations).
  • Partage de secret de Shamir (GF(2⁸)) pour une répartition en k parmi n feuilles, sans mot de passe.
  • Scan de QR code via caméra (nécessite HTTPS) ou saisie manuelle des données.
  • Estimateur d'entropie de la phrase de passe avec estimation du temps de cassage.
  • Contrôle de taille du secret (512 octets recommandés, 1600 octets maximum) avec compteur en temps réel.
  • Mise en page d'impression dédiée (une feuille A4 par QR code), avec code de récupération autonome et checksum de contrôle.
  • Thème clair / sombre (mémorisé localement).
  • Multilingue : anglais embarqué par défaut, avec packs de langues additionnels (français, allemand, néerlandais, espagnol) chargés dynamiquement.
  • Confidentialité par conception : Content-Security-Policy stricte (connect-src 'none'), aucune requête réseau, aucune donnée transmise.

Structure du projet

.
├── index.html # Application principale (interface + logique)
├── qrcode.min.js # Bibliothèque de génération de QR codes (locale)
├── html5-qrcode.min.js # Bibliothèque de scan de QR codes via caméra (locale)
└── lang/ # (optionnel) Packs de traduction
├── fr.js
├── de.js
├── nl.js
└── es.js

Les fichiers qrcode.min.js et html5-qrcode.min.js doivent être présents dans le même dossier que index.html : l'application ne charge aucune dépendance distante (CSP script-src 'self').


Utilisation

  1. Placez index.html, qrcode.min.js et html5-qrcode.min.js dans un même dossier (ajoutez éventuellement le dossier lang/ pour les traductions).
  2. Ouvrez index.html dans un navigateur récent (idéalement servi en HTTPS si vous souhaitez utiliser le scan par caméra).
  3. Choisissez un onglet :
    • Feuille unique : saisissez un libellé, le secret à protéger et une phrase de passe, puis générez et imprimez la feuille.
    • Répartition sur plusieurs feuilles : définissez le nombre total de feuilles et le seuil requis, puis générez et imprimez les feuilles (à conserver dans des lieux distincts).
    • Récupérer un secret : scannez ou collez les données d'une (ou plusieurs) feuille(s), puis saisissez la phrase de passe si nécessaire.

Déploiement

L'application est purement statique (HTML/CSS/JS), elle peut être servie par n'importe quel serveur web (Nginx, Apache, BusyBox httpd, etc.) ou hébergée en ligne. Le scan de QR code par caméra nécessite un contexte sécurisé (HTTPS) ; sans cela, la saisie manuelle des données reste disponible.

Le projet inclut un Dockerfile minimaliste basé sur busybox, qui sert les fichiers statiques via busybox httpd sous un utilisateur non‑root.

services:
cryptyrus:
image: ghcr.io/debben80/cryptyrus:latestcontainer_name: cryptyrusrestart: unless-stoppedports:
- "8080:8080"read_only: true

Sécurité

  • Feuille unique : AES‑256‑GCM + PBKDF2 (SHA‑256, 600 000 itérations) — la phrase de passe est l'unique protection du secret.
  • Répartition Shamir : aucune phrase de passe n'est nécessaire, la sécurité repose sur la séparation physique des feuilles ; une seule feuille ne révèle rien.
  • Un checksum (empreinte SHA‑256 tronquée) est imprimé sur chaque feuille afin de vérifier qu'elle a été recopiée sans erreur — il ne permet en aucun cas de retrouver le secret.

About

Chiffrement et sauvegarde physique sécurisée sur papier

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Latest commit

History

22 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Cryptyrus – bannière du projet

Cryptyrus

Chiffrement et sauvegarde physique sécurisée sur papier. Tout se passe dans votre navigateur : aucune donnée (secret ou phrase de passe) ne quitte jamais l'appareil.


Présentation

Cryptyrus est une application web statique et autonome (une seule page index.html) permettant de :

  1. Chiffrer un secret (mots de passe, clés de récupération, informations sensibles…) et le matérialiser sous forme de QR code imprimable, protégé par une phrase de passe.
  2. Répartir un secret sur plusieurs feuilles grâce au partage de secret de Shamir (schéma k-parmi-n), sans phrase de passe : il faut réunir un nombre minimum de feuilles pour reconstituer le secret.
  3. Récupérer un secret en scannant un QR code (caméra) ou en collant les données manuellement.

Chaque feuille imprimée embarque également un programme de récupération autonome (HTML/JS auto-suffisant) permettant de retrouver le secret même sans accès à Cryptyrus, simplement en ouvrant le fichier dans un navigateur.


Fonctionnalités

  • Chiffrement fort : AES‑256‑GCM, dérivation de clé PBKDF2‑SHA‑256 (600 000 itérations).
  • Partage de secret de Shamir (GF(2⁸)) pour une répartition en k parmi n feuilles, sans mot de passe.
  • Scan de QR code via caméra (nécessite HTTPS) ou saisie manuelle des données.
  • Estimateur d'entropie de la phrase de passe avec estimation du temps de cassage.
  • Contrôle de taille du secret (512 octets recommandés, 1600 octets maximum) avec compteur en temps réel.
  • Mise en page d'impression dédiée (une feuille A4 par QR code), avec code de récupération autonome et checksum de contrôle.
  • Thème clair / sombre (mémorisé localement).
  • Multilingue : anglais embarqué par défaut, avec packs de langues additionnels (français, allemand, néerlandais, espagnol) chargés dynamiquement.
  • Confidentialité par conception : Content-Security-Policy stricte (connect-src 'none'), aucune requête réseau, aucune donnée transmise.

Structure du projet

.
├── index.html # Application principale (interface + logique)
├── qrcode.min.js # Bibliothèque de génération de QR codes (locale)
├── html5-qrcode.min.js # Bibliothèque de scan de QR codes via caméra (locale)
└── lang/ # (optionnel) Packs de traduction
├── fr.js
├── de.js
├── nl.js
└── es.js

Les fichiers qrcode.min.js et html5-qrcode.min.js doivent être présents dans le même dossier que index.html : l'application ne charge aucune dépendance distante (CSP script-src 'self').


Utilisation

  1. Placez index.html, qrcode.min.js et html5-qrcode.min.js dans un même dossier (ajoutez éventuellement le dossier lang/ pour les traductions).
  2. Ouvrez index.html dans un navigateur récent (idéalement servi en HTTPS si vous souhaitez utiliser le scan par caméra).
  3. Choisissez un onglet :
    • Feuille unique : saisissez un libellé, le secret à protéger et une phrase de passe, puis générez et imprimez la feuille.
    • Répartition sur plusieurs feuilles : définissez le nombre total de feuilles et le seuil requis, puis générez et imprimez les feuilles (à conserver dans des lieux distincts).
    • Récupérer un secret : scannez ou collez les données d'une (ou plusieurs) feuille(s), puis saisissez la phrase de passe si nécessaire.

Déploiement

L'application est purement statique (HTML/CSS/JS), elle peut être servie par n'importe quel serveur web (Nginx, Apache, BusyBox httpd, etc.) ou hébergée en ligne. Le scan de QR code par caméra nécessite un contexte sécurisé (HTTPS) ; sans cela, la saisie manuelle des données reste disponible.

Le projet inclut un Dockerfile minimaliste basé sur busybox, qui sert les fichiers statiques via busybox httpd sous un utilisateur non‑root.

services:
cryptyrus:
image: ghcr.io/debben80/cryptyrus:latestcontainer_name: cryptyrusrestart: unless-stoppedports:
- "8080:8080"read_only: true

Sécurité

  • Feuille unique : AES‑256‑GCM + PBKDF2 (SHA‑256, 600 000 itérations) — la phrase de passe est l'unique protection du secret.
  • Répartition Shamir : aucune phrase de passe n'est nécessaire, la sécurité repose sur la séparation physique des feuilles ; une seule feuille ne révèle rien.
  • Un checksum (empreinte SHA‑256 tronquée) est imprimé sur chaque feuille afin de vérifier qu'elle a été recopiée sans erreur — il ne permet en aucun cas de retrouver le secret.

About

Chiffrement et sauvegarde physique sécurisée sur papier

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

22 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Cryptyrus – bannière du projet

Cryptyrus

Chiffrement et sauvegarde physique sécurisée sur papier. Tout se passe dans votre navigateur : aucune donnée (secret ou phrase de passe) ne quitte jamais l'appareil.


Présentation

Cryptyrus est une application web statique et autonome (une seule page index.html) permettant de :

  1. Chiffrer un secret (mots de passe, clés de récupération, informations sensibles…) et le matérialiser sous forme de QR code imprimable, protégé par une phrase de passe.
  2. Répartir un secret sur plusieurs feuilles grâce au partage de secret de Shamir (schéma k-parmi-n), sans phrase de passe : il faut réunir un nombre minimum de feuilles pour reconstituer le secret.
  3. Récupérer un secret en scannant un QR code (caméra) ou en collant les données manuellement.

Chaque feuille imprimée embarque également un programme de récupération autonome (HTML/JS auto-suffisant) permettant de retrouver le secret même sans accès à Cryptyrus, simplement en ouvrant le fichier dans un navigateur.


Fonctionnalités

  • Chiffrement fort : AES‑256‑GCM, dérivation de clé PBKDF2‑SHA‑256 (600 000 itérations).
  • Partage de secret de Shamir (GF(2⁸)) pour une répartition en k parmi n feuilles, sans mot de passe.
  • Scan de QR code via caméra (nécessite HTTPS) ou saisie manuelle des données.
  • Estimateur d'entropie de la phrase de passe avec estimation du temps de cassage.
  • Contrôle de taille du secret (512 octets recommandés, 1600 octets maximum) avec compteur en temps réel.
  • Mise en page d'impression dédiée (une feuille A4 par QR code), avec code de récupération autonome et checksum de contrôle.
  • Thème clair / sombre (mémorisé localement).
  • Multilingue : anglais embarqué par défaut, avec packs de langues additionnels (français, allemand, néerlandais, espagnol) chargés dynamiquement.
  • Confidentialité par conception : Content-Security-Policy stricte (connect-src 'none'), aucune requête réseau, aucune donnée transmise.

Structure du projet

.
├── index.html # Application principale (interface + logique)
├── qrcode.min.js # Bibliothèque de génération de QR codes (locale)
├── html5-qrcode.min.js # Bibliothèque de scan de QR codes via caméra (locale)
└── lang/ # (optionnel) Packs de traduction
├── fr.js
├── de.js
├── nl.js
└── es.js

Les fichiers qrcode.min.js et html5-qrcode.min.js doivent être présents dans le même dossier que index.html : l'application ne charge aucune dépendance distante (CSP script-src 'self').


Utilisation

  1. Placez index.html, qrcode.min.js et html5-qrcode.min.js dans un même dossier (ajoutez éventuellement le dossier lang/ pour les traductions).
  2. Ouvrez index.html dans un navigateur récent (idéalement servi en HTTPS si vous souhaitez utiliser le scan par caméra).
  3. Choisissez un onglet :
    • Feuille unique : saisissez un libellé, le secret à protéger et une phrase de passe, puis générez et imprimez la feuille.
    • Répartition sur plusieurs feuilles : définissez le nombre total de feuilles et le seuil requis, puis générez et imprimez les feuilles (à conserver dans des lieux distincts).
    • Récupérer un secret : scannez ou collez les données d'une (ou plusieurs) feuille(s), puis saisissez la phrase de passe si nécessaire.

Déploiement

L'application est purement statique (HTML/CSS/JS), elle peut être servie par n'importe quel serveur web (Nginx, Apache, BusyBox httpd, etc.) ou hébergée en ligne. Le scan de QR code par caméra nécessite un contexte sécurisé (HTTPS) ; sans cela, la saisie manuelle des données reste disponible.

Le projet inclut un Dockerfile minimaliste basé sur busybox, qui sert les fichiers statiques via busybox httpd sous un utilisateur non‑root.

services:
cryptyrus:
image: ghcr.io/debben80/cryptyrus:latestcontainer_name: cryptyrusrestart: unless-stoppedports:
- "8080:8080"read_only: true

Sécurité

  • Feuille unique : AES‑256‑GCM + PBKDF2 (SHA‑256, 600 000 itérations) — la phrase de passe est l'unique protection du secret.
  • Répartition Shamir : aucune phrase de passe n'est nécessaire, la sécurité repose sur la séparation physique des feuilles ; une seule feuille ne révèle rien.
  • Un checksum (empreinte SHA‑256 tronquée) est imprimé sur chaque feuille afin de vérifier qu'elle a été recopiée sans erreur — il ne permet en aucun cas de retrouver le secret.

About

Chiffrement et sauvegarde physique sécurisée sur papier

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

22 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Cryptyrus – bannière du projet

Cryptyrus

Chiffrement et sauvegarde physique sécurisée sur papier. Tout se passe dans votre navigateur : aucune donnée (secret ou phrase de passe) ne quitte jamais l'appareil.


Présentation

Cryptyrus est une application web statique et autonome (une seule page index.html) permettant de :

  1. Chiffrer un secret (mots de passe, clés de récupération, informations sensibles…) et le matérialiser sous forme de QR code imprimable, protégé par une phrase de passe.
  2. Répartir un secret sur plusieurs feuilles grâce au partage de secret de Shamir (schéma k-parmi-n), sans phrase de passe : il faut réunir un nombre minimum de feuilles pour reconstituer le secret.
  3. Récupérer un secret en scannant un QR code (caméra) ou en collant les données manuellement.

Chaque feuille imprimée embarque également un programme de récupération autonome (HTML/JS auto-suffisant) permettant de retrouver le secret même sans accès à Cryptyrus, simplement en ouvrant le fichier dans un navigateur.


Fonctionnalités

  • Chiffrement fort : AES‑256‑GCM, dérivation de clé PBKDF2‑SHA‑256 (600 000 itérations).
  • Partage de secret de Shamir (GF(2⁸)) pour une répartition en k parmi n feuilles, sans mot de passe.
  • Scan de QR code via caméra (nécessite HTTPS) ou saisie manuelle des données.
  • Estimateur d'entropie de la phrase de passe avec estimation du temps de cassage.
  • Contrôle de taille du secret (512 octets recommandés, 1600 octets maximum) avec compteur en temps réel.
  • Mise en page d'impression dédiée (une feuille A4 par QR code), avec code de récupération autonome et checksum de contrôle.
  • Thème clair / sombre (mémorisé localement).
  • Multilingue : anglais embarqué par défaut, avec packs de langues additionnels (français, allemand, néerlandais, espagnol) chargés dynamiquement.
  • Confidentialité par conception : Content-Security-Policy stricte (connect-src 'none'), aucune requête réseau, aucune donnée transmise.

Structure du projet

.
├── index.html # Application principale (interface + logique)
├── qrcode.min.js # Bibliothèque de génération de QR codes (locale)
├── html5-qrcode.min.js # Bibliothèque de scan de QR codes via caméra (locale)
└── lang/ # (optionnel) Packs de traduction
├── fr.js
├── de.js
├── nl.js
└── es.js

Les fichiers qrcode.min.js et html5-qrcode.min.js doivent être présents dans le même dossier que index.html : l'application ne charge aucune dépendance distante (CSP script-src 'self').


Utilisation

  1. Placez index.html, qrcode.min.js et html5-qrcode.min.js dans un même dossier (ajoutez éventuellement le dossier lang/ pour les traductions).
  2. Ouvrez index.html dans un navigateur récent (idéalement servi en HTTPS si vous souhaitez utiliser le scan par caméra).
  3. Choisissez un onglet :
    • Feuille unique : saisissez un libellé, le secret à protéger et une phrase de passe, puis générez et imprimez la feuille.
    • Répartition sur plusieurs feuilles : définissez le nombre total de feuilles et le seuil requis, puis générez et imprimez les feuilles (à conserver dans des lieux distincts).
    • Récupérer un secret : scannez ou collez les données d'une (ou plusieurs) feuille(s), puis saisissez la phrase de passe si nécessaire.

Déploiement

L'application est purement statique (HTML/CSS/JS), elle peut être servie par n'importe quel serveur web (Nginx, Apache, BusyBox httpd, etc.) ou hébergée en ligne. Le scan de QR code par caméra nécessite un contexte sécurisé (HTTPS) ; sans cela, la saisie manuelle des données reste disponible.

Le projet inclut un Dockerfile minimaliste basé sur busybox, qui sert les fichiers statiques via busybox httpd sous un utilisateur non‑root.

services:
cryptyrus:
image: ghcr.io/debben80/cryptyrus:latestcontainer_name: cryptyrusrestart: unless-stoppedports:
- "8080:8080"read_only: true

Sécurité

  • Feuille unique : AES‑256‑GCM + PBKDF2 (SHA‑256, 600 000 itérations) — la phrase de passe est l'unique protection du secret.
  • Répartition Shamir : aucune phrase de passe n'est nécessaire, la sécurité repose sur la séparation physique des feuilles ; une seule feuille ne révèle rien.
  • Un checksum (empreinte SHA‑256 tronquée) est imprimé sur chaque feuille afin de vérifier qu'elle a été recopiée sans erreur — il ne permet en aucun cas de retrouver le secret.

About

Chiffrement et sauvegarde physique sécurisée sur papier

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Latest commit

History

22 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Cryptyrus – bannière du projet

Cryptyrus

Chiffrement et sauvegarde physique sécurisée sur papier. Tout se passe dans votre navigateur : aucune donnée (secret ou phrase de passe) ne quitte jamais l'appareil.


Présentation

Cryptyrus est une application web statique et autonome (une seule page index.html) permettant de :

  1. Chiffrer un secret (mots de passe, clés de récupération, informations sensibles…) et le matérialiser sous forme de QR code imprimable, protégé par une phrase de passe.
  2. Répartir un secret sur plusieurs feuilles grâce au partage de secret de Shamir (schéma k-parmi-n), sans phrase de passe : il faut réunir un nombre minimum de feuilles pour reconstituer le secret.
  3. Récupérer un secret en scannant un QR code (caméra) ou en collant les données manuellement.

Chaque feuille imprimée embarque également un programme de récupération autonome (HTML/JS auto-suffisant) permettant de retrouver le secret même sans accès à Cryptyrus, simplement en ouvrant le fichier dans un navigateur.


Fonctionnalités

  • Chiffrement fort : AES‑256‑GCM, dérivation de clé PBKDF2‑SHA‑256 (600 000 itérations).
  • Partage de secret de Shamir (GF(2⁸)) pour une répartition en k parmi n feuilles, sans mot de passe.
  • Scan de QR code via caméra (nécessite HTTPS) ou saisie manuelle des données.
  • Estimateur d'entropie de la phrase de passe avec estimation du temps de cassage.
  • Contrôle de taille du secret (512 octets recommandés, 1600 octets maximum) avec compteur en temps réel.
  • Mise en page d'impression dédiée (une feuille A4 par QR code), avec code de récupération autonome et checksum de contrôle.
  • Thème clair / sombre (mémorisé localement).
  • Multilingue : anglais embarqué par défaut, avec packs de langues additionnels (français, allemand, néerlandais, espagnol) chargés dynamiquement.
  • Confidentialité par conception : Content-Security-Policy stricte (connect-src 'none'), aucune requête réseau, aucune donnée transmise.

Structure du projet

.
├── index.html # Application principale (interface + logique)
├── qrcode.min.js # Bibliothèque de génération de QR codes (locale)
├── html5-qrcode.min.js # Bibliothèque de scan de QR codes via caméra (locale)
└── lang/ # (optionnel) Packs de traduction
├── fr.js
├── de.js
├── nl.js
└── es.js

Les fichiers qrcode.min.js et html5-qrcode.min.js doivent être présents dans le même dossier que index.html : l'application ne charge aucune dépendance distante (CSP script-src 'self').


Utilisation

  1. Placez index.html, qrcode.min.js et html5-qrcode.min.js dans un même dossier (ajoutez éventuellement le dossier lang/ pour les traductions).
  2. Ouvrez index.html dans un navigateur récent (idéalement servi en HTTPS si vous souhaitez utiliser le scan par caméra).
  3. Choisissez un onglet :
    • Feuille unique : saisissez un libellé, le secret à protéger et une phrase de passe, puis générez et imprimez la feuille.
    • Répartition sur plusieurs feuilles : définissez le nombre total de feuilles et le seuil requis, puis générez et imprimez les feuilles (à conserver dans des lieux distincts).
    • Récupérer un secret : scannez ou collez les données d'une (ou plusieurs) feuille(s), puis saisissez la phrase de passe si nécessaire.

Déploiement

L'application est purement statique (HTML/CSS/JS), elle peut être servie par n'importe quel serveur web (Nginx, Apache, BusyBox httpd, etc.) ou hébergée en ligne. Le scan de QR code par caméra nécessite un contexte sécurisé (HTTPS) ; sans cela, la saisie manuelle des données reste disponible.

Le projet inclut un Dockerfile minimaliste basé sur busybox, qui sert les fichiers statiques via busybox httpd sous un utilisateur non‑root.

services:
cryptyrus:
image: ghcr.io/debben80/cryptyrus:latestcontainer_name: cryptyrusrestart: unless-stoppedports:
- "8080:8080"read_only: true

Sécurité

  • Feuille unique : AES‑256‑GCM + PBKDF2 (SHA‑256, 600 000 itérations) — la phrase de passe est l'unique protection du secret.
  • Répartition Shamir : aucune phrase de passe n'est nécessaire, la sécurité repose sur la séparation physique des feuilles ; une seule feuille ne révèle rien.
  • Un checksum (empreinte SHA‑256 tronquée) est imprimé sur chaque feuille afin de vérifier qu'elle a été recopiée sans erreur — il ne permet en aucun cas de retrouver le secret.

About

Chiffrement et sauvegarde physique sécurisée sur papier

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

22 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Cryptyrus – bannière du projet

Cryptyrus

Chiffrement et sauvegarde physique sécurisée sur papier. Tout se passe dans votre navigateur : aucune donnée (secret ou phrase de passe) ne quitte jamais l'appareil.


Présentation

Cryptyrus est une application web statique et autonome (une seule page index.html) permettant de :

  1. Chiffrer un secret (mots de passe, clés de récupération, informations sensibles…) et le matérialiser sous forme de QR code imprimable, protégé par une phrase de passe.
  2. Répartir un secret sur plusieurs feuilles grâce au partage de secret de Shamir (schéma k-parmi-n), sans phrase de passe : il faut réunir un nombre minimum de feuilles pour reconstituer le secret.
  3. Récupérer un secret en scannant un QR code (caméra) ou en collant les données manuellement.

Chaque feuille imprimée embarque également un programme de récupération autonome (HTML/JS auto-suffisant) permettant de retrouver le secret même sans accès à Cryptyrus, simplement en ouvrant le fichier dans un navigateur.


Fonctionnalités

  • Chiffrement fort : AES‑256‑GCM, dérivation de clé PBKDF2‑SHA‑256 (600 000 itérations).
  • Partage de secret de Shamir (GF(2⁸)) pour une répartition en k parmi n feuilles, sans mot de passe.
  • Scan de QR code via caméra (nécessite HTTPS) ou saisie manuelle des données.
  • Estimateur d'entropie de la phrase de passe avec estimation du temps de cassage.
  • Contrôle de taille du secret (512 octets recommandés, 1600 octets maximum) avec compteur en temps réel.
  • Mise en page d'impression dédiée (une feuille A4 par QR code), avec code de récupération autonome et checksum de contrôle.
  • Thème clair / sombre (mémorisé localement).
  • Multilingue : anglais embarqué par défaut, avec packs de langues additionnels (français, allemand, néerlandais, espagnol) chargés dynamiquement.
  • Confidentialité par conception : Content-Security-Policy stricte (connect-src 'none'), aucune requête réseau, aucune donnée transmise.

Structure du projet

.
├── index.html # Application principale (interface + logique)
├── qrcode.min.js # Bibliothèque de génération de QR codes (locale)
├── html5-qrcode.min.js # Bibliothèque de scan de QR codes via caméra (locale)
└── lang/ # (optionnel) Packs de traduction
├── fr.js
├── de.js
├── nl.js
└── es.js

Les fichiers qrcode.min.js et html5-qrcode.min.js doivent être présents dans le même dossier que index.html : l'application ne charge aucune dépendance distante (CSP script-src 'self').


Utilisation

  1. Placez index.html, qrcode.min.js et html5-qrcode.min.js dans un même dossier (ajoutez éventuellement le dossier lang/ pour les traductions).
  2. Ouvrez index.html dans un navigateur récent (idéalement servi en HTTPS si vous souhaitez utiliser le scan par caméra).
  3. Choisissez un onglet :
    • Feuille unique : saisissez un libellé, le secret à protéger et une phrase de passe, puis générez et imprimez la feuille.
    • Répartition sur plusieurs feuilles : définissez le nombre total de feuilles et le seuil requis, puis générez et imprimez les feuilles (à conserver dans des lieux distincts).
    • Récupérer un secret : scannez ou collez les données d'une (ou plusieurs) feuille(s), puis saisissez la phrase de passe si nécessaire.

Déploiement

L'application est purement statique (HTML/CSS/JS), elle peut être servie par n'importe quel serveur web (Nginx, Apache, BusyBox httpd, etc.) ou hébergée en ligne. Le scan de QR code par caméra nécessite un contexte sécurisé (HTTPS) ; sans cela, la saisie manuelle des données reste disponible.

Le projet inclut un Dockerfile minimaliste basé sur busybox, qui sert les fichiers statiques via busybox httpd sous un utilisateur non‑root.

services:
cryptyrus:
image: ghcr.io/debben80/cryptyrus:latestcontainer_name: cryptyrusrestart: unless-stoppedports:
- "8080:8080"read_only: true

Sécurité

  • Feuille unique : AES‑256‑GCM + PBKDF2 (SHA‑256, 600 000 itérations) — la phrase de passe est l'unique protection du secret.
  • Répartition Shamir : aucune phrase de passe n'est nécessaire, la sécurité repose sur la séparation physique des feuilles ; une seule feuille ne révèle rien.
  • Un checksum (empreinte SHA‑256 tronquée) est imprimé sur chaque feuille afin de vérifier qu'elle a été recopiée sans erreur — il ne permet en aucun cas de retrouver le secret.

About

Chiffrement et sauvegarde physique sécurisée sur papier

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

22 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Cryptyrus – bannière du projet

Cryptyrus

Chiffrement et sauvegarde physique sécurisée sur papier. Tout se passe dans votre navigateur : aucune donnée (secret ou phrase de passe) ne quitte jamais l'appareil.


Présentation

Cryptyrus est une application web statique et autonome (une seule page index.html) permettant de :

  1. Chiffrer un secret (mots de passe, clés de récupération, informations sensibles…) et le matérialiser sous forme de QR code imprimable, protégé par une phrase de passe.
  2. Répartir un secret sur plusieurs feuilles grâce au partage de secret de Shamir (schéma k-parmi-n), sans phrase de passe : il faut réunir un nombre minimum de feuilles pour reconstituer le secret.
  3. Récupérer un secret en scannant un QR code (caméra) ou en collant les données manuellement.

Chaque feuille imprimée embarque également un programme de récupération autonome (HTML/JS auto-suffisant) permettant de retrouver le secret même sans accès à Cryptyrus, simplement en ouvrant le fichier dans un navigateur.


Fonctionnalités

  • Chiffrement fort : AES‑256‑GCM, dérivation de clé PBKDF2‑SHA‑256 (600 000 itérations).
  • Partage de secret de Shamir (GF(2⁸)) pour une répartition en k parmi n feuilles, sans mot de passe.
  • Scan de QR code via caméra (nécessite HTTPS) ou saisie manuelle des données.
  • Estimateur d'entropie de la phrase de passe avec estimation du temps de cassage.
  • Contrôle de taille du secret (512 octets recommandés, 1600 octets maximum) avec compteur en temps réel.
  • Mise en page d'impression dédiée (une feuille A4 par QR code), avec code de récupération autonome et checksum de contrôle.
  • Thème clair / sombre (mémorisé localement).
  • Multilingue : anglais embarqué par défaut, avec packs de langues additionnels (français, allemand, néerlandais, espagnol) chargés dynamiquement.
  • Confidentialité par conception : Content-Security-Policy stricte (connect-src 'none'), aucune requête réseau, aucune donnée transmise.

Structure du projet

.
├── index.html # Application principale (interface + logique)
├── qrcode.min.js # Bibliothèque de génération de QR codes (locale)
├── html5-qrcode.min.js # Bibliothèque de scan de QR codes via caméra (locale)
└── lang/ # (optionnel) Packs de traduction
├── fr.js
├── de.js
├── nl.js
└── es.js

Les fichiers qrcode.min.js et html5-qrcode.min.js doivent être présents dans le même dossier que index.html : l'application ne charge aucune dépendance distante (CSP script-src 'self').


Utilisation

  1. Placez index.html, qrcode.min.js et html5-qrcode.min.js dans un même dossier (ajoutez éventuellement le dossier lang/ pour les traductions).
  2. Ouvrez index.html dans un navigateur récent (idéalement servi en HTTPS si vous souhaitez utiliser le scan par caméra).
  3. Choisissez un onglet :
    • Feuille unique : saisissez un libellé, le secret à protéger et une phrase de passe, puis générez et imprimez la feuille.
    • Répartition sur plusieurs feuilles : définissez le nombre total de feuilles et le seuil requis, puis générez et imprimez les feuilles (à conserver dans des lieux distincts).
    • Récupérer un secret : scannez ou collez les données d'une (ou plusieurs) feuille(s), puis saisissez la phrase de passe si nécessaire.

Déploiement

L'application est purement statique (HTML/CSS/JS), elle peut être servie par n'importe quel serveur web (Nginx, Apache, BusyBox httpd, etc.) ou hébergée en ligne. Le scan de QR code par caméra nécessite un contexte sécurisé (HTTPS) ; sans cela, la saisie manuelle des données reste disponible.

Le projet inclut un Dockerfile minimaliste basé sur busybox, qui sert les fichiers statiques via busybox httpd sous un utilisateur non‑root.

services:
cryptyrus:
image: ghcr.io/debben80/cryptyrus:latestcontainer_name: cryptyrusrestart: unless-stoppedports:
- "8080:8080"read_only: true

Sécurité

  • Feuille unique : AES‑256‑GCM + PBKDF2 (SHA‑256, 600 000 itérations) — la phrase de passe est l'unique protection du secret.
  • Répartition Shamir : aucune phrase de passe n'est nécessaire, la sécurité repose sur la séparation physique des feuilles ; une seule feuille ne révèle rien.
  • Un checksum (empreinte SHA‑256 tronquée) est imprimé sur chaque feuille afin de vérifier qu'elle a été recopiée sans erreur — il ne permet en aucun cas de retrouver le secret.

About

Chiffrement et sauvegarde physique sécurisée sur papier

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Latest commit

History

22 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Cryptyrus – bannière du projet

Cryptyrus

Chiffrement et sauvegarde physique sécurisée sur papier. Tout se passe dans votre navigateur : aucune donnée (secret ou phrase de passe) ne quitte jamais l'appareil.


Présentation

Cryptyrus est une application web statique et autonome (une seule page index.html) permettant de :

  1. Chiffrer un secret (mots de passe, clés de récupération, informations sensibles…) et le matérialiser sous forme de QR code imprimable, protégé par une phrase de passe.
  2. Répartir un secret sur plusieurs feuilles grâce au partage de secret de Shamir (schéma k-parmi-n), sans phrase de passe : il faut réunir un nombre minimum de feuilles pour reconstituer le secret.
  3. Récupérer un secret en scannant un QR code (caméra) ou en collant les données manuellement.

Chaque feuille imprimée embarque également un programme de récupération autonome (HTML/JS auto-suffisant) permettant de retrouver le secret même sans accès à Cryptyrus, simplement en ouvrant le fichier dans un navigateur.


Fonctionnalités

  • Chiffrement fort : AES‑256‑GCM, dérivation de clé PBKDF2‑SHA‑256 (600 000 itérations).
  • Partage de secret de Shamir (GF(2⁸)) pour une répartition en k parmi n feuilles, sans mot de passe.
  • Scan de QR code via caméra (nécessite HTTPS) ou saisie manuelle des données.
  • Estimateur d'entropie de la phrase de passe avec estimation du temps de cassage.
  • Contrôle de taille du secret (512 octets recommandés, 1600 octets maximum) avec compteur en temps réel.
  • Mise en page d'impression dédiée (une feuille A4 par QR code), avec code de récupération autonome et checksum de contrôle.
  • Thème clair / sombre (mémorisé localement).
  • Multilingue : anglais embarqué par défaut, avec packs de langues additionnels (français, allemand, néerlandais, espagnol) chargés dynamiquement.
  • Confidentialité par conception : Content-Security-Policy stricte (connect-src 'none'), aucune requête réseau, aucune donnée transmise.

Structure du projet

.
├── index.html # Application principale (interface + logique)
├── qrcode.min.js # Bibliothèque de génération de QR codes (locale)
├── html5-qrcode.min.js # Bibliothèque de scan de QR codes via caméra (locale)
└── lang/ # (optionnel) Packs de traduction
├── fr.js
├── de.js
├── nl.js
└── es.js

Les fichiers qrcode.min.js et html5-qrcode.min.js doivent être présents dans le même dossier que index.html : l'application ne charge aucune dépendance distante (CSP script-src 'self').


Utilisation

  1. Placez index.html, qrcode.min.js et html5-qrcode.min.js dans un même dossier (ajoutez éventuellement le dossier lang/ pour les traductions).
  2. Ouvrez index.html dans un navigateur récent (idéalement servi en HTTPS si vous souhaitez utiliser le scan par caméra).
  3. Choisissez un onglet :
    • Feuille unique : saisissez un libellé, le secret à protéger et une phrase de passe, puis générez et imprimez la feuille.
    • Répartition sur plusieurs feuilles : définissez le nombre total de feuilles et le seuil requis, puis générez et imprimez les feuilles (à conserver dans des lieux distincts).
    • Récupérer un secret : scannez ou collez les données d'une (ou plusieurs) feuille(s), puis saisissez la phrase de passe si nécessaire.

Déploiement

L'application est purement statique (HTML/CSS/JS), elle peut être servie par n'importe quel serveur web (Nginx, Apache, BusyBox httpd, etc.) ou hébergée en ligne. Le scan de QR code par caméra nécessite un contexte sécurisé (HTTPS) ; sans cela, la saisie manuelle des données reste disponible.

Le projet inclut un Dockerfile minimaliste basé sur busybox, qui sert les fichiers statiques via busybox httpd sous un utilisateur non‑root.

services:
cryptyrus:
image: ghcr.io/debben80/cryptyrus:latestcontainer_name: cryptyrusrestart: unless-stoppedports:
- "8080:8080"read_only: true

Sécurité

  • Feuille unique : AES‑256‑GCM + PBKDF2 (SHA‑256, 600 000 itérations) — la phrase de passe est l'unique protection du secret.
  • Répartition Shamir : aucune phrase de passe n'est nécessaire, la sécurité repose sur la séparation physique des feuilles ; une seule feuille ne révèle rien.
  • Un checksum (empreinte SHA‑256 tronquée) est imprimé sur chaque feuille afin de vérifier qu'elle a été recopiée sans erreur — il ne permet en aucun cas de retrouver le secret.

About

Chiffrement et sauvegarde physique sécurisée sur papier

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages