Files
Camilou.fr/HTML/TN/Crypto/test11.html
T
Camilla Schoeser ec81bcd634 ajout tout
2026-05-29 21:10:04 +02:00

196 lines
7.6 KiB
HTML

<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<title>SIGNAL_RAW_DATA</title>
<style>
@import url('https://fonts.googleapis.com/css2?family=VT323&display=swap');
:root {
--color: #00ff41;
--bg: #050505;
}
body, html {
margin: 0; padding: 0; background: var(--bg);
color: var(--color); font-family: 'VT323', monospace;
overflow: hidden; height: 100vh;
}
/* Effet de CRT (Vieux moniteur) */
.crt::before {
content: " "; display: block; position: absolute; top: 0; left: 0; bottom: 0; right: 0;
background: linear-gradient(rgba(18, 16, 16, 0) 50%, rgba(0, 0, 0, 0.25) 50%),
linear-gradient(90deg, rgba(255, 0, 0, 0.06), rgba(0, 255, 0, 0.02), rgba(0, 0, 255, 0.06));
z-index: 2; background-size: 100% 2px, 3px 100%; pointer-events: none;
}
#canvas-bg { position: fixed; top: 0; left: 0; z-index: 0; opacity: 0.3; }
.content-layer {
position: relative; z-index: 10; height: 100vh;
display: flex; justify-content: center; align-items: center;
}
.data-fragment {
display: none; width: 80%; max-width: 900px;
animation: glitch-view 0.2s steps(2);
}
.data-fragment.active { display: block; }
@keyframes glitch-view {
0% { transform: translate(10px, -10px); filter: invert(1); }
50% { transform: translate(-10px, 10px); }
100% { transform: translate(0); }
}
h1 { font-size: 4rem; text-transform: uppercase; margin: 0; line-height: 0.8; letter-spacing: -2px; }
.sub { font-size: 1.5rem; color: #fff; background: var(--color); color: #000; display: inline-block; padding: 0 10px; }
.raw-text { font-size: 1.8rem; margin-top: 20px; white-space: pre-wrap; }
.line { margin-bottom: 10px; border-left: 4px solid var(--color); padding-left: 15px; }
.scatter { position: absolute; font-size: 0.8rem; opacity: 0.4; pointer-events: none; }
table { width: 100%; border-collapse: collapse; font-size: 1.5rem; margin-top: 20px; }
th { text-align: left; text-decoration: underline; }
td { padding: 5px 0; }
.progress-frame { border: 1px solid var(--color); height: 10px; width: 100%; margin-top: 50px; position: relative; }
.progress-bar { background: var(--color); height: 100%; transition: width 0.3s; }
</style>
</head>
<body class="crt">
<canvas id="canvas-bg"></canvas>
<div class="content-layer">
<div class="data-fragment active">
<h1>SIGNAL_PROTOCOL</h1>
<div class="sub">DECRYPTION_IN_PROGRESS</div>
<div class="raw-text">
<div class="line">TARGET: C.I.D.A Analysis</div>
<div class="line">STATUS: [Confidentialité] [Intégrité] [Authentification] [Dispo]</div>
<div class="line" style="color: #fff">> REQUIS: PFS / AUTO-HEAL / ASYNC / E2EE</div>
</div>
</div>
<div class="data-fragment">
<h1 style="font-size: 3rem;">ERA_0: CLEAR_TEXT</h1>
<div class="raw-text">
<div class="line">1982: SMTP // Hop-by-Hop // Security: NULL</div>
<div class="line">1992: SMS // "Merry Xmas" // Center: SMSC [Orange/SFR Read-Access]</div>
<div class="line">2020: RCS // Google-Push E2EE // Interop-Issues: Apple_v_Android</div>
</div>
</div>
<div class="data-fragment">
<h1>PIONEERS_LOG</h1>
<div class="raw-text">
<div class="line">1991_PGP: [E2EE_Async] - <span style="color:red">No_PFS</span></div>
<div class="line">2004_OTR: [PFS_Deniable] - <span style="color:red">Sync_Only</span></div>
<div class="line" style="font-size: 1.2rem; opacity: 0.7;">"Bob must be online to handshake. Mobile fail."</div>
</div>
</div>
<div class="data-fragment">
<h1 style="color: #fff;">SIGNAL_CORE</h1>
<div class="raw-text">
<div class="line">X3DH: Pre-keys system [Alice speaks to offline Bob]</div>
<div class="line">DOUBLE_RATCHET: Self-healing keys [Every msg = New Key]</div>
<div class="line">PQXDH: Post-Quantum armor deployed.</div>
</div>
</div>
<div class="data-fragment">
<h1>BENCHMARK_v2</h1>
<table>
<tr><th>MODE</th><th>E2EE</th><th>PFS</th><th>ASYNC</th></tr>
<tr><td>SMS</td><td>NO</td><td>NO</td><td>YES</td></tr>
<tr><td>PGP</td><td>YES</td><td>NO</td><td>YES</td></tr>
<tr><td>OTR</td><td>YES</td><td>YES</td><td>NO</td></tr>
<tr><td>SIGNAL</td><td>YES</td><td>YES</td><td>YES</td></tr>
</table>
</div>
<div class="data-fragment">
<h1 style="text-align: center;">TECH_DRAWING</h1>
<div style="font-size: 10rem; text-align: center;">🦦</div>
<div class="sub" style="display: block; text-align: center;">WHITEBOARD_MODE: ON</div>
</div>
<div class="data-fragment">
<h1 style="color: red;">THREAT_INTEL</h1>
<div class="raw-text">
<div class="line">QUANTUM: Shor vs ECDH [Solution: PQXDH]</div>
<div class="line">ENDPOINTS: Pegasus Spyware [OS Bypass]</div>
<div class="line">MitM: Key Injection [Check Safety Numbers]</div>
</div>
</div>
<div class="data-fragment">
<h1>GOUVERNANCE</h1>
<div class="raw-text">
<div class="line">DISCORD: Centralized / No-E2EE (Modération)</div>
<div class="line">MATRIX: Federated / Tchap / Full Sovereignty</div>
</div>
<div class="sub" style="margin-top: 50px;">SESSION_CLOSED // QUESTIONS?</div>
</div>
</div>
<div class="progress-frame" style="position: fixed; bottom: 0; left: 0;">
<div class="progress-bar" id="bar" style="width: 12.5%;"></div>
</div>
<script>
const canvas = document.getElementById('canvas-bg');
const ctx = canvas.getContext('2d');
let current = 0;
const frags = document.querySelectorAll('.data-fragment');
// Background Matrix-like
canvas.width = window.innerWidth;
canvas.height = window.innerHeight;
const chars = "010101ABCDEFGHIJKLMNOPQRSTUVWXYZ";
const drops = Array(Math.floor(canvas.width/20)).fill(1);
function draw() {
ctx.fillStyle = "rgba(5, 5, 5, 0.1)";
ctx.fillRect(0, 0, canvas.width, canvas.height);
ctx.fillStyle = "#00ff41";
ctx.font = "15px monospace";
drops.forEach((y, i) => {
const text = chars[Math.floor(Math.random()*chars.length)];
ctx.fillText(text, i*20, y*20);
if(y*20 > canvas.height && Math.random() > 0.975) drops[i] = 0;
drops[i]++;
});
}
setInterval(draw, 33);
// Navigation
function update() {
frags.forEach((f, i) => f.classList.toggle('active', i === current));
document.getElementById('bar').style.width = ((current + 1) / frags.length * 100) + "%";
}
window.addEventListener('keydown', e => {
if(e.key === 'ArrowRight' || e.key === ' ') { current = (current + 1) % frags.length; update(); }
if(e.key === 'ArrowLeft') { current = (current - 1 + frags.length) % frags.length; update(); }
});
// Random noise text
for(let i=0; i<20; i++) {
const d = document.createElement('div');
d.className = 'scatter';
d.style.left = Math.random()*100 + "%";
d.style.top = Math.random()*100 + "%";
d.innerText = "0x" + Math.floor(Math.random()*16777215).toString(16);
document.body.appendChild(d);
}
</script>
</body>
</html>