Weird Text Generator

HTML

<p>
  <label for="seedText">Seed-Wort:</label>
  <input type="text" id="seedText" placeholder="Gib das Seed-Wort ein" />
  <label for="seedSelect">Oder wähle eins aus:</label>
  <select name="seeds" id="seedSelect" onchange="performSelect(this);">
    <option value="">&nbsp;</option>
    <option value="hallo">hallo</option>
    <option value="guten Tag">guten Tag</option>
    <option value="Computer">Computer</option>
    <option value="Floppy">Floppy</option>
    <option value="adieu">adieu</option>
  </select>
</p>
<p>
  <label for="encodeText">Text für Encode:</label>
  <input type="text" id="encodeText" placeholder="Gib den Text ein" />
</p>
<p>
  <label for="decodeText">Text für Decode:</label>
  <input type="text" id="decodeText" placeholder="Gib den kodierten Text ein" />
</p>
<p>
  <button onclick="performEncode()">Encode</button>
  <button onclick="performDecode()">Decode</button>
</p>
<p>
  <label for="resultText">Ergebnis:</label>
  <input type="text" id="resultText" placeholder="Ergebnis..." />
</p>

JavaScript

class WeirdText {
  constructor() {}
  cyrb128(str) {
    let h1 = 1779033703,
      h2 = 3144134277,
      h3 = 1013904242,
      h4 = 2773480762
    for (let i = 0, k; i < str.length; i++) {
      k = str.charCodeAt(i)
      h1 = h2 ^ Math.imul(h1 ^ k, 597399067)
      h2 = h3 ^ Math.imul(h2 ^ k, 2869860233)
      h3 = h4 ^ Math.imul(h3 ^ k, 951274213)
      h4 = h1 ^ Math.imul(h4 ^ k, 2716044179)
    }
    h1 = Math.imul(h3 ^ (h1 >>> 18), 597399067)
    h2 = Math.imul(h4 ^ (h2 >>> 22), 2869860233)
    h3 = Math.imul(h1 ^ (h3 >>> 17), 951274213)
    h4 = Math.imul(h2 ^ (h4 >>> 19), 2716044179)
    ;(h1 ^= h2 ^ h3 ^ h4), (h2 ^= h1), (h3 ^= h1), (h4 ^= h1)
    return [h1 >>> 0, h2 >>> 0, h3 >>> 0, h4 >>> 0]
  }
  sfc32(a, b, c, d) {
    return function () {
      a |= 0
      b |= 0
      c |= 0
      d |= 0
      let t = (((a + b) | 0) + d) | 0
      d = (d + 1) | 0
      a = b ^ (b >>> 9)
      b = (c + (c << 3)) | 0
      c = (c << 21) | (c >>> 11)
      c = (c + t) | 0
      return (t >>> 0) / 4294967296
    }
  }
  getRand(seedStr) {
    let seed = this.cyrb128(seedStr)
    let rand = this.sfc32(seed[0], seed[1], seed[2], seed[3])
    return rand
  }
  encode(str, seedStr) {
    let rand = this.getRand(seedStr)
    let arr = str.split("")
    for (let j = 0; j < 7; j++) {
      for (let i = 0; i < arr.length; i++) {
        let r = parseInt(rand() * arr.length)
        let t = arr[i]
        arr[i] = arr[r]
        arr[r] = t
      }
    }
    return arr.join("")
  }
  decode(str, seedStr) {
    let rand = this.getRand(seedStr)
    let rands = []
    for (let i = 0; i < str.length * 7; i++) {
      rands.push(rand())
    }
    let arr = str.split("")
    for (let j = 6; j >= 0; j--) {
      for (let i = arr.length - 1; i >= 0; i--) {
        let r = parseInt(rands[j * arr.length + i] * arr.length)
        let t = arr[i]
        arr[i] = arr[r]
        arr[r] = t
      }
    }
    return...