Advertisement
Guest User

Untitled

a guest
Mar 30th, 2022
163
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
HTML 4.53 KB | None | 0 0
  1. <html>
  2. <body>
  3. Input<br>
  4. <textarea id="input" rows="6" cols="70"></textarea>
  5. <br>
  6. <button onclick="encode()">encode</button><button onclick="decode()">decode</button>
  7. <br>
  8. Output<br>
  9. <textarea id="output" rows="6" cols="70" readonly></textarea>
  10. <div id="error" style="display: none;">
  11.   <p id="error_text"></p>
  12. </div>
  13. <script type="text/javascript">
  14.   function decode(){
  15.     var input = document.getElementById("input");
  16.     var text = input.value.trim()
  17.     try {
  18.       if (!text.match(/^[0-9A-Z$*+-./:]+$/)) throw new Error('Not Base43')
  19.       var val43 = Base43.decode(text);
  20.       document.getElementById("output").value = val43;
  21.       document.getElementById("error").style.display = "none";
  22.     } catch (e) {
  23.       document.getElementById("error").style.display = "block";
  24.       if (e.message) {
  25.         document.getElementById("error_text").innerHTML = e.message;  
  26.       }
  27.     }
  28.    
  29.     return false;
  30.   }
  31.   function encode(){
  32.     var input = document.getElementById("input");
  33.     var hex = input.value.trim()
  34.     try {
  35.       if (!hex.match(/^([0-9a-fA-F]{2})+$/)) throw new Error('Not HEX')
  36.       var text = ''
  37.       for (var i = 0; i < hex.length / 2; i++) {
  38.        text += String.fromCharCode(parseInt(hex.slice(i*2, i*2 + 2), 16))
  39.      }
  40.      var val43 = Base43.encode(text);
  41.      document.getElementById("output").value = val43;
  42.      document.getElementById("error").style.display = "none";
  43.    } catch (e) {
  44.      document.getElementById("error").style.display = "block";
  45.      if (e.message) {
  46.        document.getElementById("error_text").innerHTML = e.message;  
  47.      }
  48.    }
  49.    
  50.    return false;
  51.  }
  52. </script>
  53. <script type="text/javascript">
  54.   (function() {
  55.     const base43Chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ$*+-./:";
  56.  
  57.     // long division with an arbitrary base.
  58.     function divMod(byteArr, base, divisor, startAt) {
  59.  
  60.       var result = byteArr.slice();
  61.       var remainder = 0;
  62.       var temp;
  63.       startAt = startAt || 0;
  64.       for (var i = startAt; i < byteArr.length; i++) {
  65.        temp = remainder * base + byteArr[i];
  66.        result[i] = Math.floor(temp / divisor);
  67.        remainder = temp % divisor;
  68.      }
  69.      return {
  70.        div: result,
  71.        mod: remainder
  72.      }
  73.    }
  74.  
  75.    function byteArrGreaterThan(byteArr, limit) {
  76.  
  77.      var length = byteArr.length;
  78.  
  79.      var last = byteArr[length - 1];
  80.      if (last >= limit) {
  81.         return true;
  82.       } else {
  83.         for (var i = 0; i < length - 1; i++) {
  84.          if (byteArr[i] > 0){
  85.             return true;
  86.           }
  87.         }
  88.       }
  89.  
  90.       return false;
  91.     }
  92.  
  93.  
  94.     var Base43 = {
  95.      
  96.       encode: function(input) {
  97.         var number_encode = 0;
  98.         var result = [];
  99.         var origInput = input = input.split('').map(function(l){ return l.charCodeAt(0); });
  100.  
  101.         var r;
  102.         while (byteArrGreaterThan(input, 43)) {
  103.           r = divMod(input, 256, 43, 0);
  104.           result.unshift(base43Chars[r.mod]);
  105.           input = r.div;
  106.         }
  107.         result.unshift(base43Chars[r.div.pop()]);
  108.  
  109.         var pad = '';
  110.         for (var l of origInput) {
  111.           if (l === 0) {
  112.             pad += base43Chars[0];  
  113.           } else {
  114.             break;
  115.           }
  116.         }
  117.        
  118.         return  pad + result.join('');
  119.       }
  120.  
  121.       // input is a base-43 string, output is a hex string
  122.       ,decode: function(input) {
  123.        
  124.         var result = [];
  125.         var input43 = [];
  126.         for (var i in input) {
  127.           var l = input[i];
  128.           var index = base43Chars.indexOf(l);
  129.           if (index < 0) {
  130.            throw new Error("Illegal character. Allowed characters are:" + base43Chars);
  131.          }
  132.          input43[i] = index;
  133.        }
  134.  
  135.        var zeroCount = 0;
  136.        var pad = '';
  137.        while (zeroCount < input.length && input43[zeroCount] == 0) {
  138.          zeroCount += 1;
  139.          pad += "00";
  140.        }
  141.  
  142.        var r;
  143.        var startAt = zeroCount;
  144.  
  145.        while (byteArrGreaterThan(input43, 256)) {
  146.          r = divMod(input43, 43, 256, startAt);
  147.          input43 = r.div;
  148.          result.unshift(String.fromCharCode(r.mod));
  149.        }
  150.  
  151.        // convert byte string to hex representation
  152.  
  153.        var resultHex = result.map(function(l) {
  154.          var temp = l.charCodeAt(0).toString(16);
  155.          temp = temp.length < 2 ? "0" + temp : temp;
  156.          return temp;
  157.        });
  158.  
  159.        return  pad + resultHex.join("");
  160.      }
  161.    }
  162.  
  163.    window.Base43 = Base43;
  164.  })();
  165. </script>
  166. </body>
  167. </html>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement