`
Neil_yang
  • 浏览: 130086 次
  • 性别: Icon_minigender_1
  • 来自: 珠海
社区版块
存档分类
最新评论

常用JS加密编码算法 二:Base64编码,解码函数

阅读更多

二:Base64编码,解码函数

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); 

function base64encode(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; 
} 

function base64decode(str) { 
    var c1, c2, c3, c4; 
    var i, len, out; 

    len = str.length; 
    i = 0; 
    out = ""; 
    while(i < len) { 
    /* c1 */ 
    do { 
        c1 = base64DecodeChars[str.charCodeAt(i++) & 0xff]; 
    } while(i < len && c1 == -1); 
    if(c1 == -1) 
        break; 

    /* c2 */ 
    do { 
        c2 = base64DecodeChars[str.charCodeAt(i++) & 0xff]; 
    } while(i < len && c2 == -1); 
    if(c2 == -1) 
        break; 

    out += String.fromCharCode((c1 << 2) | ((c2 & 0x30) >> 4)); 

    /* c3 */ 
    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)); 

    /* c4 */ 
    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; 
} 

function utf16to8(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; 
} 

function utf8to16(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: 
        // 0xxxxxxx 
        out += str.charAt(i-1); 
        break; 
      case 12: case 13: 
        // 110x xxxx 10xx xxxx 
        char2 = str.charCodeAt(i++); 
        out += String.fromCharCode(((c & 0x1F) << 6) | (char2 & 0x3F)); 
        break; 
      case 14: 
        // 1110 xxxx 10xx xxxx 10xx xxxx 
        char2 = str.charCodeAt(i++); 
        char3 = str.charCodeAt(i++); 
        out += String.fromCharCode(((c & 0x0F) << 12) | 
                       ((char2 & 0x3F) << 6) | 
                       ((char3 & 0x3F) << 0)); 
        break; 
    } 
    } 

    return out; 
} 


function doit() { 
    var f = document.f 
    f.output.value = base64encode(utf16to8(f.source.value)) 
    f.decode.value = utf8to16(base64decode(f.output.value)) 
} 

 

分享到:
评论

相关推荐

    sqlserver2005的base64加密解密函数

    在SQL Server 2005中,Base64编码是一种常用的数据编码方式,它将二进制数据转化为可打印的ASCII字符,常用于在网络上传输或存储非ASCII字符的数据。Base64编码能够确保数据在传输过程中不被篡改,因为它是通过特定...

    加密js工具类:base64,md5,sha1

    在JavaScript中,`base64.js`文件可能包含了一个Base64编码和解码的函数库,例如`btoa()`用于编码,`atob()`用于解码,这些原生JavaScript方法可以轻松处理Base64转换。 **MD5(Message-Digest Algorithm 5)**是一...

    js的base64和base32加密函数

    在JavaScript编程中,Base64和Base32是两种常见的数据编码方式,它们主要用于在网络上传输二进制数据。在本文中,我们将深入探讨这两种编码方法以及如何在JavaScript中实现它们,同时解决在Ajax请求中传递包含特殊...

    C语言实现Base64编解码(加密和解密).zip

    Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,Base64就是一种基于64个可打印字符来表示二进制数据的方法。可查看RFC2045~RFC2049,上面有MIME的详细规范。 Base64要求把每三个8Bit的字节转换为四个6...

    QT图片BAse64编码与解码

    QByteArray是QT中的一个用于处理字节序列的类,而QCryptographicHash则提供了一些加密哈希函数,其中包括Base64编码和解码。 1. **Base64编码**: - 首先,我们需要读取图片文件的内容到一个QByteArray对象中。 -...

    C BASE64 编解码函数

    BASE64常用于电子邮件附件、图片和其他二进制数据的编码,在Web开发、加密算法以及数据传输等领域有广泛应用。 ### 文件结构分析 提供的代码示例是一个简单的BASE64编解码实现。该程序主要包括以下部分: #### 2.1...

    base64加密解密的hive udf函数

    throw new HiveException("Failed to decode Base64: " + e.getMessage()); } } } @Override public String getDisplayString(String[] children) { return "Base64 operation"; } @Override public ...

    Base64加密算法.pdf

    Base64 解码函数是将 Base64 编码数据转换回二进制数据的函数。下面是一个 C 语言实现的 Base64 解码函数: char *base64_decode(const char *data, int data_len) { ... } 这个函数将 Base64 编码数据转换回二...

    易语言Base64编解码新汇编源码

    易语言Base64编解码新汇编源码是一个针对易语言编程环境的代码资源,主要功能是实现Base64编码和解码。Base64是一种用于将任意二进制数据转换为可打印字符的编码方式,常用于在网络上传输包含二进制的数据,如图片或...

    Base64编码原理及base64函数

    Base64编码是一种常用的将二进制数据转换为可打印字符的编码,占用空间较小。在RFC 3548中定义。Base64编码的原理是将数据编码成24bit的二进制数,然后将其分成四组,每组6bit,对应于一个数字:0-63。然后根据这个...

    易语言Base64支持密码加密

    解密文本的过程则正好相反,首先,接收方需要对Base64编码的字符串进行解码,得到加密后的二进制数据,然后用相同的密码进行解密,从而恢复原始文本。这个过程需要确保密码的准确性和安全性,否则解密将无法成功。 ...

    加密,解密,Base64编码,解码, Hex的编码解码 的工具类

    "加密,解密,Base64编码,解码,Hex的编码解码的工具类"是一个非常实用的软件模块,它提供了对数据进行不同形式处理的功能。让我们深入探讨一下这些概念以及它们在实际应用中的作用。 首先,我们来看加密。加密是...

    base64编码解码易语言

    另一个名为"base64解码"的函数,则用于将Base64编码的字符串还原为原始的二进制数据。 在提供的压缩包文件"base64.e"中,很可能是包含了一个易语言的程序或者库文件,用于实现Base64的编码和解码功能。这个文件可能...

    JavaScript的加密算法类库:crypto-js

    5. **Base64编码/解码**:用于将二进制数据转换为可打印的ASCII字符,便于在网络上传输。 6. **PBKDF2(密码基于密钥派生函数2)**:用于通过用户输入的密码生成加密密钥,增加了密码破解的难度。 使用Crypto-js库...

    js的base64加密解密

    总的来说,这个纯JavaScript的Base64加密解密工具类为开发者提供了一种轻量级、自包含的方式来处理Base64编码和解码任务,尤其适用于那些希望避免引入额外依赖的项目。了解和掌握Base64编码与解码的基本原理和实现...

    轻松实现Sql Server 2005下的Base64、MD5、SHA1算法函数

    在SQL Server 2005中,开发人员经常需要处理数据加密和编码转换,例如Base64、MD5和SHA1。这些算法在数据库安全、数据验证和信息完整性方面起着重要作用。本篇文章将详细介绍如何在SQL Server 2005环境下轻松实现这...

    VC 中使用Base64编解码图片

    6. 使用Base64解码函数将字符串转换回字节数组。 7. 将解码后的字节数组写入新的图像文件。 在实际开发中,你可能需要处理错误检查、异常处理以及优化性能等问题。例如,确保输入图像文件的正确性,处理Base64编码...

    使用JS加密BASE64

    标题“使用JS加密BASE64”指的是利用JavaScript来对字符串或二进制数据进行BASE64编码。这种操作通常用于将非ASCII字符转换为可以在URL、邮件头或其他仅支持ASCII的地方使用的格式。在描述中提到的“将字符串或二...

    base64编解码C/C++实现

    4. **解码实现**:`base64.h`中可能会有一个`decodeBase64`函数,它接受Base64编码的字符串,返回解码后的二进制数据。这个函数需要处理Base64字符串中的填充字符,并确保正确恢复原始字节顺序。 5. **边界情况处理...

    JS base64 加密解密

    JavaScript中的Base64编码是一种广泛使用的数据编码方式,它将任意二进制数据转换成可打印的ASCII字符串,便于在网络上传输。Base64编码基于标准的64个字符,这些字符都属于URL和电子邮件安全的ASCII子集,因此在...

Global site tag (gtag.js) - Google Analytics