Viestit paikassa Library of Babel

My first quick implementation of the ”full page as key” idea

4. lokakuuta 2015 klo 10.46
Sijainti: Keskustelupalstat: Library of Babel

Here’s my first quick implementation of the ”full page as key” idea:

Save page as key:

(function () {
    localStorage.setItem('libraryOfBabelKey', document.getElementById('textblock').textContent);
}());

Decrypt using previously saved key:

(function () {
    var alphabet, c, i, m, text, key;

    alphabet = 'abcdefghijklmnopqrstuvwxyz,. ';
    key = localStorage.getItem('libraryOfBabelKey');
    if (!key) {
        alert('No key has been saved.');
        return;
    }
    text = {
        original: document.getElementById('textblock').textContent,
        decoded: ''
    };

    for (i = 0; i < text.original.length; i += 1) {
        c = text.original.substr(i, 1);
        if (c === '\n') {
            text.decoded += c;
        } else {
            m = alphabet.indexOf(key.substr(i, 1));
            text.decoded += alphabet.substr(((alphabet.indexOf(c) - m) % alphabet.length), 1);
        }
    }
    document.getElementById('textblock').textContent = text.decoded;
}());

Vastaa viestiin sen kontekstissa (Library of Babel)

Already noticed the first mistake

4. lokakuuta 2015 klo 9.03
Sijainti: Keskustelupalstat: Library of Babel

You’re right Jonathan, using one whole page to decipher another would also be interesting. It’d take a bit more code (temporary storage is needed for keeping the previous page) but it still shouldn’t be too difficult. The pages could then be considered as having been encrypted with a one-time pad, which is unbreakable and thus a cool idea in itself.

I already noticed the first mistake in my code above: I forgot to strip the page number from the title prior to use, but it should be, as numbers aren’t part of the alphabet. Here’s a fixed version that takes out the page number and whitespace preceding it:

(function () {
    var alphabet, c, i, m, text, title;

    alphabet = 'abcdefghijklmnopqrstuvwxyz,. ';
    title = document.title.replace(new RegExp('[^abcdefghijklmnopqrstuvwxyz,\. ]', 'g'), '');
    title = title.substr(0, title.length - 1);
    text = {
        original: document.getElementById('textblock').textContent,
        decoded: ''
    };

    for (i = 0; i < text.original.length; i += 1) {
        c = text.original.substr(i, 1);
        if (c === '\n') {
            text.decoded += c;
        } else {
            m = alphabet.indexOf(title.substr(i % title.length, 1)); /* add "+ 1" if you want A = 1, B = 2,... instead of A = 0, B = 1,... */
            text.decoded += alphabet.substr(((alphabet.indexOf(c) - m) % alphabet.length), 1);
        }
    }
    document.getElementById('textblock').textContent = text.decoded;
}());

Vastaa viestiin sen kontekstissa (Library of Babel)

Vigenère cipher

3. lokakuuta 2015 klo 15.09
Sijainti: Keskustelupalstat: Library of Babel

Here’s a piece of JavaScript I made that uses the book title as a Vigenère cipher keyword to decrypt the page content. You can paste it directly into the browser’s URL bar on a library page to decrypt. (I made it in a hurry so it comes with no warranty!)

javascript:(function () {
    var alphabet, c, i, m, text, title;

    alphabet = 'abcdefghijklmnopqrstuvwxyz,. ';
    title = document.title;
    text = {
        original: document.getElementById('textblock').textContent,
        decoded: ''
    };

    for (i = 0; i < text.original.length; i += 1) {
        c = text.original.substr(i, 1);
        if (c === '\n') {
            text.decoded += c;
        } else {
            m = alphabet.indexOf(title.substr(i % title.length, 1)); /* add "+ 1" if you want A = 1, B = 2,... instead of A = 0, B = 1,... */
            text.decoded += alphabet.substr(((alphabet.indexOf(c) - m) % alphabet.length), 1);
        }
    }
    document.getElementById('textblock').textContent = text.decoded;
}());

Vastaa viestiin sen kontekstissa (Library of Babel)

You could argue the code already is open

26. syyskuuta 2015 klo 18.53
Sijainti: Keskustelupalstat: Library of Babel

You could argue the code already is open. After all, you can just go to the library and get it, provided you know where to look. ;-)

Vastaa viestiin sen kontekstissa (Library of Babel)