使用混合脚本编程来实现的Base64解码

简介:

前几天用脚本做了个Base64编码程序,今天把解码程序也实现了,不过同样是使用JScript和VBScript混合编程来搞定的。

    解码的过程和编码过程是基本相同的,代码如下:

ContractedBlock.gif < script  language ="javascript" > dot.gif </ script >
ContractedBlock.gif < script  language ="javascript" > dot.gif </ script >
ContractedBlock.gif < script  language ="vbscript" > dot.gif </ script >

    其中第一段脚本定义的是一个类似hashtable的结构,这样的目的是为了避免每次去手动遍历在编码程序中定义的那个Base64Alphabet数组来做转换,并且这个结构的效率很高。原理解释可参看:比较JavaScript中的集合及其检索效率。对于这个hashtable,由于不能使用'+'、'/'和'='来做索引,所以实现了一个getCharCode的方法来作为代理,同时利用这个代理过程把=(pad)映射为了0。这样的好处就是我们不用在解码程序里专门去处理pad了,因为即使有pad,对于解码后的十六进制字符串也就是多些0在后面而已,并且是每有一个pad会对应多出一个'00'。在处理十六进制字符串之前执行一下:

None.gif     if ( padCount > 0 )
None.gif    {
None.gif         hexString = hexString.substr(0, hexString.length-padCount*2);
None.gif    }

就行了。

    这个解码代码中还有两个地方可以优化,一是part1、part2、part3和part4那里,可以使用一个part数组 var part = new Array(4); 然后从strCoding里面去遍历4个连续有效的字符出来,然后再求intA,intB,intC。这样就可以省去解码开始前的数据清理工作 strCoding = strCoding.replace(/\s+/g, '');,同时还可以忽略非Base64Alphabet中定义的字符带来的错误干扰。二是intA、intB和intC也可以用一个数组来做,这样就可以把代码:

None.gif     if ( intA < 0x10 )
None.gif    {
None.gif         hexString += '0';
None.gif    }   
None.gif    hexString += intA.toString(16);
None.gif     if ( intB < 0x10 )
None.gif    {
None.gif         hexString += '0';
None.gif    }
None.gif    hexString += intB.toString(16);
None.gif     if ( intC < 0x10 )
None.gif    {
None.gif             hexString += '0';
None.gif    }  
None.gif    hexString += intC.toString(16); 
None.gif

做成一个3次的循环,否则这样流水账般的代码太ugly了red_smile.gif

    当然这个解码程序的效率也不是很高,数据量太大的时候几乎就没有什么可用性了,这里我只是主观的觉得两个脚本引擎轮番调用可能也是性能瓶颈,如果您有好的优化方法,请不吝赐教哦thumbs_up.gif


本文转自博客园鸟食轩的博客,原文链接:http://www.cnblogs.com/birdshome/,如需转载请自行联系原博主。

目录
相关文章
|
3月前
火山中文编程 -- HEX编码与BASE64编码
火山中文编程 -- HEX编码与BASE64编码
19 0
|
8月前
|
Java API 索引
一文读懂Base64编码
一文读懂Base64编码
52 0
|
9月前
|
数据采集 算法 安全
Base64 编码原理 && 实现
Base64 编码原理 && 实现
|
开发者
base64解码工具
base64解码工具
base64解码工具
|
XML 存储 JSON
基础知识 - 为什么要使用 Base64 编码,有哪些情景需求?
基础知识 - 为什么要使用 Base64 编码,有哪些情景需求?
323 0
|
Java
小程序中base64解码/编码
很多人都在为小程序如何实现base64编码/解码困扰,于是我参考前端大佬们对JavaScript中实现base64的文章进行了改写。简单实现了一个。。希望能帮助到小程序开发一线的大家吧、 不多说直接上代码: /** * UTF16和UTF8转换对照表 * U+00000000 – U+000000...
4753 1
|
算法 区块链 索引
【密码学】Base64 编码 ( Base64 简介 | Base64 编码原理 | 最后编码组字节不足时补位 ‘=‘ 符号 | Base64 编码实现参考 )(一)
【密码学】Base64 编码 ( Base64 简介 | Base64 编码原理 | 最后编码组字节不足时补位 ‘=‘ 符号 | Base64 编码实现参考 )(一)
347 0
【密码学】Base64 编码 ( Base64 简介 | Base64 编码原理 | 最后编码组字节不足时补位 ‘=‘ 符号 | Base64 编码实现参考 )(一)
|
算法 Android开发
【密码学】Base64 编码 ( Base64 简介 | Base64 编码原理 | 最后编码组字节不足时补位 ‘=‘ 符号 | Base64 编码实现参考 )(二)
【密码学】Base64 编码 ( Base64 简介 | Base64 编码原理 | 最后编码组字节不足时补位 ‘=‘ 符号 | Base64 编码实现参考 )(二)
310 0
|
API 语音技术 Python
Python 技术篇-用base64库对音频、图片等文件进行base64编码和解码实例演示
Python 技术篇-用base64库对音频、图片等文件进行base64编码和解码实例演示
891 0
Python 技术篇-用base64库对音频、图片等文件进行base64编码和解码实例演示
|
编解码 Go 区块链
Go语言实现Base64、Base58编码与解码
目录 1. 常见的编码 2. go语言实现base64的编码与解码 2.1 Base64编码原理 2.2 实现Base64的编码与解码 3. go语言实现base58编码与解码 3.1 base58的编码过程 3.2 base58编解码具体实现 4. 最后
340 0
Go语言实现Base64、Base58编码与解码