Łamanie szyfru: wszystkie przesunięcia
Praktyka: teksty i szyfry - JavaScript od podstaw: konsola (JavaScript)
Szyfr Cezara ma tylko 25 sensownych kluczy, więc da się go złamać, próbując każdego (atak siłowy, brute force). Komputer odszyfrowuje tekst każdym przesunięciem i szuka słowa, którego się spodziewamy. Przy okazji liczymy litery obiektem-licznikiem: w polskich tekstach najczęstsze jest A, więc najczęstsza litera szyfrogramu też podpowiada klucz.
function shiftChar(ch, k) {
const code = ch.charCodeAt(0);
if (code >= 65 && code <= 90) {
return String.fromCharCode(((code - 65 + k) % 26 + 26) % 26 + 65);
}
if (code >= 97 && code <= 122) {
return String.fromCharCode(((code - 97 + k) % 26 + 26) % 26 + 97);
}
return ch;
}
function caesar(text, k) {
let result = '';
for (const ch of text) {
result += shiftChar(ch, k);
}
return result;
}
const secret = 'ZWVARHUPL D ZGRVSL V VZTLQ';
for (let k = 1; k < 26; k++) {
const attempt = caesar(secret, -k);
if (attempt.includes('SZKOLE')) {
console.log(`Klucz ${k}: ${attempt}`);
}
}
const counts = {};
for (const ch of secret) {
if (ch !== ' ') counts[ch] = (counts[ch] || 0) + 1;
}
const [top] = Object.entries(counts).sort((a, b) => b[1] - a[1]);
console.log('Najczęstsza litera:', top[0], 'razy', top[1]);Ładowanie interaktywnego edytora... Jeśli się nie pojawi, włącz JavaScript.
Wszystkie lekcje kursu JavaScript od podstaw: konsola·Zaloguj się, aby zapisać postęp na koncie.