`
vefan
  • 浏览: 85594 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Javascript Base64 字符串编码/解码,互操作

阅读更多
var StringUtil = new function()
    {
    
        this.Base64Encode = function(str)
        {
            return base64encode(utf16to8(str));
        };
    
        this.Base64Decode = function(str)
        {
            return utf8to16(base64decode(str))
        };
    
        var base64EncodeChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
        var base64DecodeChars = new Array(-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 62, -1, -1, -1, 63, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, -1, -1, -1, -1, -1, -1, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, -1, -1, -1, -1, -1, -1, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, -1, -1, -1, -1, -1);
        var base64encode = function(str)
        {
            var out, i, len;
            var c1, c2, c3;
            len = str.length;
            i = 0;
            out = "";
            while (i < len)
            {
                c1 = str.charCodeAt(i++) & 0xff;
                if (i == len)
                {
                    out += base64EncodeChars.charAt(c1 >> 2);
                    out += base64EncodeChars.charAt((c1 & 0x3) << 4);
                    out += "==";
                    break;
                }
                c2 = str.charCodeAt(i++);
                if (i == len)
                {
                    out += base64EncodeChars.charAt(c1 >> 2);
                    out += base64EncodeChars.charAt(((c1 & 0x3) << 4) | ((c2 & 0xF0) >> 4));
                    out += base64EncodeChars.charAt((c2 & 0xF) << 2);
                    out += "=";
                    break;
                }
                c3 = str.charCodeAt(i++);
                out += base64EncodeChars.charAt(c1 >> 2);
                out += base64EncodeChars.charAt(((c1 & 0x3) << 4) | ((c2 & 0xF0) >> 4));
                out += base64EncodeChars.charAt(((c2 & 0xF) << 2) | ((c3 & 0xC0) >> 6));
                out += base64EncodeChars.charAt(c3 & 0x3F);
            }
            return out;
        };
    
        var base64decode = function(str)
        {
            var c1, c2, c3, c4;
            var i, len, out;
            len = str.length;
            i = 0;
            out = "";
            while (i < len)
            {
                do
                {
                    c1 = base64DecodeChars[str.charCodeAt(i++) & 0xff];
                } while (i < len && c1 == -1);
                if (c1 == -1)
                    break;
                do
                {
                    c2 = base64DecodeChars[str.charCodeAt(i++) & 0xff];
                } while (i < len && c2 == -1);
                if (c2 == -1)
                    break;
                out += String.fromCharCode((c1 << 2) | ((c2 & 0x30) >> 4));
                do
                {
                    c3 = str.charCodeAt(i++) & 0xff;
                    if (c3 == 61)
                        return out;
                    c3 = base64DecodeChars[c3];
                } while (i < len && c3 == -1);
                if (c3 == -1)
                    break;
                out += String.fromCharCode(((c2 & 0XF) << 4) | ((c3 & 0x3C) >> 2));
                do
                {
                    c4 = str.charCodeAt(i++) & 0xff;
                    if (c4 == 61)
                        return out;
                    c4 = base64DecodeChars[c4];
                } while (i < len && c4 == -1);
                if (c4 == -1)
                    break;
                out += String.fromCharCode(((c3 & 0x03) << 6) | c4);
            }
            return out;
        };
        var utf16to8 = function(str)
        {
            var out, i, len, c;
            out = "";
            len = str.length;
            for (i = 0; i < len; i++)
            {
                c = str.charCodeAt(i);
                if ((c >= 0x0001) && (c <= 0x007F))
                {
                    out += str.charAt(i);
                } else if (c > 0x07FF)
                {
                    out += String.fromCharCode(0xE0 | ((c >> 12) & 0x0F));
                    out += String.fromCharCode(0x80 | ((c >> 6) & 0x3F));
                    out += String.fromCharCode(0x80 | ((c >> 0) & 0x3F));
                } else
                {
                    out += String.fromCharCode(0xC0 | ((c >> 6) & 0x1F));
                    out += String.fromCharCode(0x80 | ((c >> 0) & 0x3F));
                }
            }
            return out;
        };
        var utf8to16 = function(str)
        {
            var out, i, len, c;
            var char2, char3;
            out = "";
            len = str.length;
            i = 0;
            while (i < len)
            {
                c = str.charCodeAt(i++);
                switch (c >> 4)
                {
                    case 0: case 1: case 2: case 3: case 4: case 5: case 6: case 7:
                        out += str.charAt(i - 1);
                        break;
                    case 12: case 13:
                        char2 = str.charCodeAt(i++);
                        out += String.fromCharCode(((c & 0x1F) << 6) | (char2 & 0x3F));
                        break;
                    case 14:
                        char2 = str.charCodeAt(i++);
                        char3 = str.charCodeAt(i++);
                        out += String.fromCharCode(((c & 0x0F) << 12) | ((char2 & 0x3F) << 6) | ((char3 & 0x3F) << 0));
                        break;
                }
            }
            return out;
        }
    } 

分享到:
评论

相关推荐

    图片文件与Base64编码字节数组字符串互转

    在IT领域,尤其是在Web开发中,图片文件与Base64编码字节数组字符串的转换是一种常见的操作。这种转换在不直接使用图片文件路径或URL,而是将图片数据嵌入到HTML、CSS或JavaScript中时非常有用。下面我们将详细探讨...

    PDF和Base64格式互相转换

    反向操作是将Base64编码的字符串解码回原始的二进制数据,然后保存为PDF文件。这个过程包括两个步骤:首先,使用Base64解码算法将字符串转换回二进制数据;其次,将解码后的二进制数据写入新的PDF文件中。 3. **...

    Delphi Base64 演示及躲坑

    反之,如果你从JavaScript接收到Base64字符串,可能需要添加回车换行符以便在Delphi中正确解码: ```delphi // 在Base64字符串中添加回车换行符 Base64String := StringReplace(Base64String, '', #13#10 + '', ...

    图片互转Base64

    "图片互转Base64"是指将图片文件转换成Base64字符串,同时也能够将Base64字符串还原为图片文件。这种技术在存储和传输图像时特别有用,因为它允许在不依赖外部文件的情况下嵌入图片到HTML或JavaScript代码中。 图片...

    图片与Base64互转

    1. **解析Base64字符串**:首先,我们需要将接收到的Base64字符串按照Base64编码规则解码,得到原始的二进制数据。 2. **创建图片文件**:解码后的二进制数据是原始的图片内容,可以使用编程语言的相应库来创建一个...

    基于ASP的图片base64编码互转工具.zip

    ASP(Active Server ...综合上述知识点,"基于ASP的图片base64编码互转工具"是一个实用的工具,它结合了文件操作、二进制数据处理和编码解码技术,方便地实现了图片与base64编码的相互转换,适用于各种Web应用场景。

    可互操作的Java和JavaScript AES/128/192/256加密算法代码

    为了确保互操作,开发者可能需要进行一些额外的步骤,比如在JavaScript中使用Base64编码将二进制数据转换为字符串,然后在Java端进行解码。 总结来说,"可互操作的Java和JavaScript AES/128/192/256加密算法代码"这...

    c#和avascript加解密之间的互转代码分享

    - 接收已加密的Base64字符串`source`,先进行Base64解码。 - 对解码后的字节数组进行Xxtea解密,得到32位整数数组。 - 将解密后的整数数组转换回字节数组,并恢复原始UTF8编码,最后解码为字符串返回。 在加密和...

    可互操作的java和javascriptDES/3DES加密解密算法

    这通常意味着在Java端生成密钥后,将其转换为Base64字符串,然后在JavaScript端解码成字节数组。 2. **填充模式**:Java的`Cipher`类允许选择不同的填充模式,如PKCS5Padding。JavaScript实现也需要匹配这种填充。 ...

    Base47:Kotlin编写的Base47编码器解码器,使用表情符号作为其字符集

    这意味着Java开发者也可以方便地使用Base47编码解码器,这得益于Kotlin与Java的互操作性。 至于"EmojiKotlin",这可能是项目的一个子模块或者库,专门处理与表情符号相关的操作,例如解析和验证表情符号编码,或者...

    java和javascript之间的DES加密解密

    同时,由于JavaScript可能无法处理字节流,所以可能需要将加密后的字节转换为Base64编码的字符串。在Java端解密时,需要先将Base64字符串解码回字节流。 5. **文件`DES加密解密`**: 压缩包中的文件可能包含了Java...

    Java-Js双向Des对称加密Demo

    4. **编码格式**:确保Java和JavaScript在进行字符串到字节数组的转换时使用相同的字符编码,如UTF-8。 5. **数据格式**:加密后的结果是字节数据,需要以某种方式(如Base64编码)在Java和JavaScript之间传输。 ...

    老版本的doPdf,简洁易用

    反过来,解码过程就是从文本文件中读取Base64字符串并将其还原为原始图像。 在实际应用中,图片转文本的功能通常用于光学字符识别(OCR),比如从扫描的文档或图片中提取可编辑的文字。而文本转图片则有助于保护...

    js常用加密文件.rar

    Base64是一种编码方式,将二进制数据转换为ASCII字符串,方便在网络上传输。Hex则是十六进制表示法。这个文件提供了在Base64和十六进制之间转换的功能,这在处理加密后的数据时非常有用,因为加密后的数据通常是二...

    utils:用于Precis和Base插件的通用实用程序库

    它涉及到了字符编码、字符串比较、规范化等方面,对于处理多语言环境下的网络应用至关重要。 在"utils"库中,"Precis"实用工具提供了与PRECIS框架相关的辅助函数,比如字符串的规范化处理、字符集的转换、字符串...

    RSA.js.rar_C#_RSA.js C#_choiceold_js rsa_加密解密

    通常,C#加密的数据需要转换为Base64字符串,然后在JavaScript中解码并解密,反之亦然。 6. **密钥管理**:妥善保管私钥至关重要,尤其是在客户端JavaScript中,因为JavaScript代码容易被逆向工程。一般情况下,...

    切肉机「Hasher」-crx插件

    ROT-13,JavaScript encodeURI(),encodeURIComponent(),HTML特殊字符编码/解码用法:输入文本并单击结果。 它将被复制到剪贴板。 可以在单独的窗口中打开扩展名。 源代码可在github上找到。 支持语言:English

    hasher-firefox:火狐扩展。 计算 MD5、SHA-1、SHA-2、IPSubnet、URL 解码、Base64 等

    哈希器(Firefox 扩展) ... 密码(可与 OpenSSL 互操作) :AES-256、DES、三重 DES、Rabbit、RC4、RC4Drop。 使用 CBC/Pkcs7。 网络:子网计算器,IP :left-right_arrow: Dec, Ip → Bin, Ip → Hex

    C#+FLASH交互

    - 在Flash中,可以使用BitmapData对象读取并编码图片为Base64字符串或其他格式,如JPEG或PNG,然后通过ExternalInterface.call方法调用C#的方法,将图片数据传过去。 - C#端需要定义一个接收图片数据的函数,例如...

    JAVA - RSA- JS 加密

    为确保互操作性,通常需要将RSA密钥转换为标准格式,如Base64编码的PEM或DER格式。在JAVA端生成密钥后,可以通过HTTP服务(例如这里的`rsaServlet`)将密钥传输给前端JavaScript。前端JavaScript接收并解码密钥,...

Global site tag (gtag.js) - Google Analytics