En ole hirveästi javascriptiä tai htmlää kirjoittanut mutta tein What is Base62 Conversion? ohjeilla yksinkertaisen muuntimen:No sehän tässä on ongelma, etten ymmärrä mistä se bittisyys tässä tulee. Jos generoin randomisti 4 tavua (esim. js:llä window.crypto.getRandomValues(new Uint8Array(4)), saan 32 bittiä informaatiota, ja lopuksi konvertoin sen base62-merkkijonoksi, se sisältää edelleen 32 bittiä informaatiota, ja on joka kerta täsmälleen 4 merkkiä pitkä. Siis miten on mahdollista, että neljän base62 -merkin laittaminen peräkkäin eri menetelmällä yhtäkkiä onkin vain 24-bittinen? Se on tällaista kun ei ole teoriataustaa, ja järkikin juoksee välillä melkein takaperin![]()
HTML:
<!DOCTYPE html>
<html>
<body>
<p id="demo"></p>
<script>
merkit = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
numero = self.crypto.getRandomValues(new Uint32Array(1))[0];
base62 = "";
x = numero;
while (x > 0) {
base62 += merkit[x % 62];
x -= x % 62;
x /= 62;
}
base62 = base62.split('').reverse().join('');
document.getElementById("demo").innerHTML = numero + " = " + base62;
</script>
</body>
</html>
Teet ilmeisesti jokaiselle 4 lle tavulle erikseen base62 muunnoksen? Tästähän tulee eri arvo kuin jos nuo neljä tavua tulkittaisiin 32 bittisenä lukuna. Yhden tavun muunnoksesta tulee 1 tai 2 merkkiä tulokseksi eli jos nuo lyöt yhteen siitä tulee 4-8 merkkiä yhteensä. Onko mahdollista että otat jokaisesta muunnoksesta vahingossa vain yhden merkin mukaan tulokseen?3581715481 = 3uOVoX


