在网上找了一圈,想找一个js实现base32编码的,网上只有实现base64编码的,其实原理都是一样的。都是将字符的ASCII码分组后再重新组
合,区别只是每组包含的有效的bytes不同,base64是将3个ASCII字节,组合成4个base字节。而base32是将5个ASCII字节组合
成8个base字节。
下面是我根据java实现base32编码改编的。可以实现对中文的编码。
核心的加密和解密函数如下,附件里是完整的代码,包括对中文的支持函数(对中文的编码是从网上引用的)。
/**
*加密函数
*返回被编码加密的字符串
*/
var getEncodeString = function (srcString){
//var srcString = 'abc';
var i = 0;
var index = 0;
var digit = 0;
var currByte;
var nextByte;
var retrunString = '';
for (var i=0; i< srcString.length;) {
//var index = 0;
currByte = (srcString.charCodeAt(i) >= 0) ? srcString.charCodeAt(i)
: (srcString.charCodeAt(i) + 256);
if (index > 3) {
if ((i + 1) < srcString.length) {
nextByte = (srcString.charCodeAt(i + 1) >= 0)
? srcString.charCodeAt(i + 1)
: (srcString.charCodeAt(i + 1) + 256);
} else {
nextByte = 0;
}
digit = currByte & (0xFF >> index);
index = (index + 5) % 8;
digit <<= index;
digit |= (nextByte >> (8 - index));
i++;
} else {
digit = (currByte >> (8 - (index + 5))) & 0x1F;
index = (index + 5) % 8;
if (index == 0) {
i++;
}
}
retrunString = retrunString + BASE32CHAR.charAt(digit);
}
return retrunString.toLowerCase();
}
/**
*解密函数
*返回解密的字符串
*/
var getDecodeString = function (encodeString){
var i;
var index;
var lookup;
var offset;
var digit;
var encodeString = encodeString.toUpperCase();
var stringLen = parseInt((encodeString.length * 5) / 8);
var bytes = new Array(stringLen);
for ( var a=0;a<stringLen;a++){
bytes[a]=0;
}
for (i = 0, index = 0, offset = 0; i < encodeString.length; i++) {
var charCode0 = '0'.charCodeAt(0);
lookup = encodeString.charCodeAt(i) - charCode0;
if ((lookup < 0) || (lookup >= BASE32LOOOKUP.length)) {
continue;
}
digit = BASE32LOOOKUP[lookup];
if (digit == 0xFF) {
continue;
}
if (index <= 3) {
index = (index + 5) % 8;
if (index == 0) {
bytes[offset] = bytes[offset] | digit;
offset++;
if (offset >= bytes.length) {
break;
}
} else {
bytes[offset] = bytes[offset] | (digit << (8 - index));
}
} else {
index = (index + 5) % 8;
bytes[offset] = bytes[offset] | (digit >>> index);
offset++;
if (offset >= bytes.length) {
break;
}
bytes[offset] = bytes[offset] | (digit << (8 - index));
if(bytes[offset]>=256){
//var lp = parseInt(bytes[offset]/256);
bytes[offset] %= 256;
}
}
}
//return bytes.join(',');
var realkeyString = '';
var decodeString = '';
for ( var a=0;a<bytes.length;a++){
var realkey = String.fromCharCode(bytes[a]);
realkeyString += realkey;
//decodeString += bytes[a];
}
return realkeyString;
}
var returnEncodeStr = getEncodeString(strUnicode2Ansi('你是我的宝贝'));
var returnDecodeStr = strAnsi2Unicode(getDecodeString(returnEncodeStr));
alert(returnDecodeStr);
})()
分享到:
相关推荐
总之,Java和JavaScript中Base64编码和解码的实现原理相似,都是将二进制数据转换为可打印的ASCII字符。Java自Java 8开始内置了Base64支持,而JavaScript则依赖于`btoa()`和`atob()`函数,或者使用第三方库。在实际...
base62.js, node.js的javascript Base62编码/解码器 Base62.js JavaScript Base62编码/解码器什么是Base62编码?Base62编码将数字转换为ASCII字符串( 0 -9,一个z 和一个z ),反之亦然,这通常会导致比较短的字符串...
对于Base32编码,JavaScript原生不提供内置函数,我们需要借助第三方库,例如`base32.js`或`crypto-js`。 以下是一个简单的示例,展示了如何在JavaScript中使用这些库进行加密和解密操作: ```javascript // 引入...
Base64编码通过把每3个字节的二进制数据转换为4个字符来实现编码过程,每个字符代表着6个比特的信息,因此编码后的字符串长度总是原数据长度的4/3。这种编码方式的一个明显好处是,可以将数据直接嵌入到网页中,尤其...
简介 Base64是一种基于64个可打印字符来表示二进制数据的表示方法。由于2的6次方等于64,所以每6个...当然,你也可以将图片、文本和音视频转换成二进制序列,再然后转换为Base64编码。我们这里讨论的是如何将二进制转换
Js实现Base64编码与解码 Base64其实是一种简单的置换加密方式,但是BASE64的用处往往并不是为了防止信息泄露,而且为了方便传输,进过BASE64编码后的信息会比原始信息长,大概是4/3倍。 Base64是一种基于64个可打印...
在易语言汇编中实现Base64编码,通常会涉及以下几个步骤: 1. **数据分割**:将输入的字节数组按照每3个字节一组进行分割,如果最后剩余不足3个字节,需要额外处理。 2. **十六进制转换**:对每3个字节进行转换,...
在本示例中,我们讨论的是如何使用JavaScript对基于Base64编码的图片进行解码并显示在网页上。Base64是一种用于将二进制数据编码为ASCII字符串的编码方式,它在传输或存储非文本数据时非常有用,例如图片。 在HTML...
.net C#实现Base64编码与解码
JavaScript的简单Base32(RFC 4648)编码/解码功能支持UTF-8编码。 演示版 下载 安装 您也可以使用Bower安装hi-base32。 bower install hi-base32 对于node.js,可以使用以下命令进行安装: npm install hi-base...
js实现base64编码解码 base64编码原理: base64可编码范围(ASCII字符范围内\u0000-\u00ff),所以每个字符必须8位,以3个字符为一组,转换为6bit的字节(3*8=4*6=24). 在每个6bit字节的高位添加0组成8bit的字节,然后将每8...
Base编码家族包括Base16、Base32、Base64以及Base85等,每种编码都有其特定的应用场景和特点。 1. **Base16(十六进制编码)** Base16是将二进制数据转化为16进制表示,因为16进制有16个字符(0-9和A-F),所以每...
分析这个文件可以帮助我们更深入地理解在JavaScript中如何处理中文Base64编码的具体实现。 总结来说,处理JavaScript中的中文Base64编码,关键在于正确地转换中文字符串到UTF-8字节数组,再进行Base64编码和解码。...
`jquery.base64.js`是一个jQuery插件,它提供了`.base64_encode()`和`.base64_decode()`方法,用于在JavaScript中实现Base64编码和解码。以下是如何使用这个库的例子: ```javascript // 引入jquery.base64.js ...
在JavaScript(JS)中,Base64是一种常用的编码方式,用于将二进制数据转换成ASCII字符串,便于在网络上传输。在前端开发中,我们有时会遇到需要将Base64编码的图片保存或下载到本地的情况。这个过程涉及到浏览器的...
**前端实现Base64编码** 在JavaScript中,可以使用`btoa()`函数对文本进行Base64编码。对于图片,可以通过FileReader API读取图片文件,使用`readAsDataURL()`方法将文件读取为Data URL,其格式就是Base64编码的图片...
function getEncodeString(srcString) { var BASE32CHAR = "ABCDEFGHIJKLMNOPQRSTUVWXYZ234567"; var i = 0; var index = 0;
在这个"base32-免费.rar"压缩包中,我们找到了一个名为"base32.js"的文件,这很可能是一个JavaScript实现的Base32编码和解码库。 Base32编码的原理是将原始的二进制数据分割成5位一组,然后用Base32字符集中的字符...