Skip to content

Instantly share code, notes, and snippets.

@ArrayIterator
Created August 24, 2024 13:56
Show Gist options
  • Save ArrayIterator/759f4f8e4f805eec6a32c0ea09464bbd to your computer and use it in GitHub Desktop.
Save ArrayIterator/759f4f8e4f805eec6a32c0ea09464bbd to your computer and use it in GitHub Desktop.

Revisions

  1. ArrayIterator created this gist Aug 24, 2024.
    51 changes: 51 additions & 0 deletions base64_encode.js
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,51 @@
    /**
    * Fix base64 encode for javascript
    */
    const base64_encode = (param) => {
    const convert_binary_str = (str) => {
    if (str.length < 1) {
    return '';
    }
    let ord = str[0].charCodeAt(0);
    if (ord < 0) {
    ord = 0xFFFFFFFF + ord + 1;
    }
    let tmp = ord.toString(2);
    tmp = "0".repeat(8 - tmp.length) + tmp;
    return tmp + convert_binary_str(str.substring(1));
    };
    param = convert_binary_str(param);
    let final = "";
    let start = 0;
    let tmp;
    while (start < param.length) {
    if (param.substring(start).length < 6) {
    param += "0".repeat(6 - param.substring(start).length);
    }
    let bin = param.slice(start, start + 6);
    tmp = parseInt(bin.replace(/[^01]/gi, ''), 2);
    if (tmp < 26) {
    final += String.fromCharCode(tmp + 65);
    }
    else if (tmp > 25 && tmp < 52) {
    final += String.fromCharCode(tmp + 71);
    }
    else if (tmp === 62) {
    final += "+";
    }
    else if (tmp === 63) {
    final += "/";
    }
    else if (!tmp) {
    final += "A";
    }
    else {
    final += String.fromCharCode(tmp - 4);
    }
    start += 6;
    }
    if ((final.length % 4) > 0) {
    final += "=".repeat(4 - final.length % 4);
    }
    return final;
    };
    47 changes: 47 additions & 0 deletions base64_encode.ts
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,47 @@
    /**
    * Fix base64 encode for javascript
    */
    const base64_encode = (param: any): string => {
    const convert_binary_str = (str: string): string => {
    if (str.length < 1) {
    return '';
    }
    let ord: number = str[0].charCodeAt(0);
    if (ord < 0) {
    ord = 0xFFFFFFFF + ord + 1;
    }
    let tmp = ord.toString(2);
    tmp = "0".repeat(8 - tmp.length) + tmp;
    return tmp + convert_binary_str(str.substring(1));
    }
    param = convert_binary_str(param);
    let final = "";
    let start = 0;
    let tmp: number;
    while (start < param.length) {
    if (param.substring(start).length < 6) {
    param += "0".repeat(6 - param.substring(start).length);
    }
    let bin = (param as string).slice(start, start + 6);
    tmp = parseInt(bin.replace(/[^01]/gi, ''), 2);
    if (tmp < 26) {
    final += String.fromCharCode(tmp + 65);
    } else if (tmp > 25 && tmp < 52) {
    final += String.fromCharCode(tmp + 71);
    } else if (tmp === 62) {
    final += "+";
    } else if (tmp === 63) {
    final += "/";
    } else if (!tmp) {
    final += "A";
    } else {
    final += String.fromCharCode(tmp - 4);
    }
    start += 6;
    }

    if ((final.length % 4) > 0) {
    final += "=".repeat(4 - final.length % 4);
    }
    return final;
    }