- 浏览: 453788 次
- 性别:
- 来自: 广州
最新评论
-
lhgyy00:
很好,回去好好研究下,3Q
博客资源与博客工具大全 -
ljl.java:
♦
你会遇到几段恋情?很准的哦~ -
ljl.java:
♦
你会遇到几段恋情?很准的哦~ -
jzzwy:
你这个red5是什么版本 Iterator<IConne ...
red5获取在线用户列表 -
81365341:
看着标题“red5配置详解”点进来的,结果没看到一句和配置有关 ...
red5配置详解
在近来的工作中,需要在Web页上制作复杂的逻辑和框架以及后台之间交换数据,特别是和后台交换数据,编码是个必须考虑的问题。否则可能会因为编码不同,把脚本的执行给搞得乱七八糟,根本得不到想要的结果。Base64是一种常用而又简单的编码,就先从它下手弄弄了。
关于Base64的详细定义可以查看RFC 2045,如果简单的说一下呢:Base64内容传送编码被设计用来把任意序列的8位字节描述为一种不易被人直接识别的形式(The Base64 Content-Transfer-Encoding is designed to represent arbitrary sequences of octets in a form that need not be humanly readable.)。好玩,弄来不被人识别?不识别就不识别嘛,反正程序能之别就行了。
这个编码为什么叫Base64呢?这是应为它的转换需要依赖一张64个字符的转换表,叫做The Base64 Alphabet。 Base64以3个字节为一个转换单位,把这24bits分为4份,高位补零,再查前面说的那个转换表,就编码完毕了。如果被转换的数据(以byte为单位)不能被3整除,按余数补"="(pad),当然最多也就只有两种可能,不是补一个pad就是补两个pad。
例如转换"博客园",这三个字的内码十六进制为:B2A9 BFCD D4B0
二进制为:10110010 10101001 10111111 11001101 11010100 10110000
六个一拨:00101100 00101010 00100110 00111111 00110011 00011101 00010010 00110000,再按新的编码转为十进制查表后得到"博客园"的base64编码为:"sqm/zdSw"。
// 蓝色的0是补位的
之前有人用JavaScript来做过Base64编码,结果居然使用escape来获取字符的编码,这样当遇到被转换的字符有汉字时就faint掉了,escape在基于NT的32位系统下得到的是汉字的Unicode编码。但是JavaScript却真的没有办法得到汉字的GB码:( 我也郁闷了半天,后来在mozart0的帮助下使用VBScript加JScript混合搞定了这个编码算法实现。
附1:The Base64 Alphabet
Value Encoding Value Encoding Value Encoding Value Encoding
0 A 16 Q 32 g 48 w
1 B 17 R 33 h 49 x
2 C 18 S 34 i 50 y
3 D 19 T 35 j 51 z
4 E 20 U 36 k 52 0
5 F 21 V 37 l 53 1
6 G 22 W 38 m 54 2
7 H 23 X 39 n 55 3
8 I 24 Y 40 o 56 4
9 G 25 Z 41 p 57 5
10 K 26 a 42 q 58 6
11 L 27 b 43 r 59 7
12 M 28 c 44 s 60 8
13 N 29 d 45 t 61 9
14 O 30 e 46 u 62 +
15 P 31 f 47 v 63 /
附2:base64编码源代码
<script language="javascript">
var Base64Alphabet = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q',
'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o',
'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '+', '/'];
function EncodeBase64(string)
{
var hexString = string.getGBCode();
window.status = hexString;
var base64 = '';
var B64A = Base64Alphabet;
var padCount = hexString.length%3;
var count = parseInt(hexString.length/6);
var i = 0;
for ( i=0 ; i < count ; ++i )
{
var intA = parseInt(hexString.charAt(i*6+0)+hexString.charAt(i*6+1), 16);
var intB = parseInt(hexString.charAt(i*6+2)+hexString.charAt(i*6+3), 16);
var intC = parseInt(hexString.charAt(i*6+4)+hexString.charAt(i*6+5), 16);
var part1 = intA >> 2;
var part2 = ((intA & 0x03) << 4) | (intB >> 4);
var part3 = ((intB & 0x0f) << 2) | (intC >> 6);
var part4 = intC & 0x3f;
base64 += B64A[part1] + B64A[part2] + B64A[part3] + B64A[part4];
}
if ( padCount == 1 )
{
var intA = parseInt(hexString.charAt(i*6+0)+hexString.charAt(i*6+1), 16);
var intB = parseInt(hexString.charAt(i*6+2)+hexString.charAt(i*6+3), 16);
var part1 = intA >> 2;
var part2 = ((intA & 0x03) << 4) | (intB >> 4);
var part3 = ((intB & 0x0f) << 2);
base64 += B64A[part1] + B64A[part2] + B64A[part3] + '=';
}
if ( padCount == 2 )
{
var intA = parseInt(hexString.charAt(i*6+0)+hexString.charAt(i*6+1), 16);
var part1 = intA >> 2;
var part2 = ((intA & 0x03) << 4);
base64 += B64A[part1] + B64A[part2] + '==';
}
return base64;
}
</script>
<script language="vbscript">
function vbGetGBCode(str)
dim i, length, s
length = len(str)
for i=1 to length
hexCode = hex(asc(str.charAt(i-1)))
if (len(hexCode) mod 2) = 0 then
s = s & hexCode
else
s = s & "0" & hexCode
end if
next
vbGetGBCode = s
end function
</script>
<script language="javascript">
String.prototype.getGBCode = function()
{
return vbGetGBCode(this);
}
</script>
关于Base64的详细定义可以查看RFC 2045,如果简单的说一下呢:Base64内容传送编码被设计用来把任意序列的8位字节描述为一种不易被人直接识别的形式(The Base64 Content-Transfer-Encoding is designed to represent arbitrary sequences of octets in a form that need not be humanly readable.)。好玩,弄来不被人识别?不识别就不识别嘛,反正程序能之别就行了。
这个编码为什么叫Base64呢?这是应为它的转换需要依赖一张64个字符的转换表,叫做The Base64 Alphabet。 Base64以3个字节为一个转换单位,把这24bits分为4份,高位补零,再查前面说的那个转换表,就编码完毕了。如果被转换的数据(以byte为单位)不能被3整除,按余数补"="(pad),当然最多也就只有两种可能,不是补一个pad就是补两个pad。
例如转换"博客园",这三个字的内码十六进制为:B2A9 BFCD D4B0
二进制为:10110010 10101001 10111111 11001101 11010100 10110000
六个一拨:00101100 00101010 00100110 00111111 00110011 00011101 00010010 00110000,再按新的编码转为十进制查表后得到"博客园"的base64编码为:"sqm/zdSw"。
// 蓝色的0是补位的
之前有人用JavaScript来做过Base64编码,结果居然使用escape来获取字符的编码,这样当遇到被转换的字符有汉字时就faint掉了,escape在基于NT的32位系统下得到的是汉字的Unicode编码。但是JavaScript却真的没有办法得到汉字的GB码:( 我也郁闷了半天,后来在mozart0的帮助下使用VBScript加JScript混合搞定了这个编码算法实现。
附1:The Base64 Alphabet
Value Encoding Value Encoding Value Encoding Value Encoding
0 A 16 Q 32 g 48 w
1 B 17 R 33 h 49 x
2 C 18 S 34 i 50 y
3 D 19 T 35 j 51 z
4 E 20 U 36 k 52 0
5 F 21 V 37 l 53 1
6 G 22 W 38 m 54 2
7 H 23 X 39 n 55 3
8 I 24 Y 40 o 56 4
9 G 25 Z 41 p 57 5
10 K 26 a 42 q 58 6
11 L 27 b 43 r 59 7
12 M 28 c 44 s 60 8
13 N 29 d 45 t 61 9
14 O 30 e 46 u 62 +
15 P 31 f 47 v 63 /
附2:base64编码源代码
<script language="javascript">
var Base64Alphabet = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q',
'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o',
'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '+', '/'];
function EncodeBase64(string)
{
var hexString = string.getGBCode();
window.status = hexString;
var base64 = '';
var B64A = Base64Alphabet;
var padCount = hexString.length%3;
var count = parseInt(hexString.length/6);
var i = 0;
for ( i=0 ; i < count ; ++i )
{
var intA = parseInt(hexString.charAt(i*6+0)+hexString.charAt(i*6+1), 16);
var intB = parseInt(hexString.charAt(i*6+2)+hexString.charAt(i*6+3), 16);
var intC = parseInt(hexString.charAt(i*6+4)+hexString.charAt(i*6+5), 16);
var part1 = intA >> 2;
var part2 = ((intA & 0x03) << 4) | (intB >> 4);
var part3 = ((intB & 0x0f) << 2) | (intC >> 6);
var part4 = intC & 0x3f;
base64 += B64A[part1] + B64A[part2] + B64A[part3] + B64A[part4];
}
if ( padCount == 1 )
{
var intA = parseInt(hexString.charAt(i*6+0)+hexString.charAt(i*6+1), 16);
var intB = parseInt(hexString.charAt(i*6+2)+hexString.charAt(i*6+3), 16);
var part1 = intA >> 2;
var part2 = ((intA & 0x03) << 4) | (intB >> 4);
var part3 = ((intB & 0x0f) << 2);
base64 += B64A[part1] + B64A[part2] + B64A[part3] + '=';
}
if ( padCount == 2 )
{
var intA = parseInt(hexString.charAt(i*6+0)+hexString.charAt(i*6+1), 16);
var part1 = intA >> 2;
var part2 = ((intA & 0x03) << 4);
base64 += B64A[part1] + B64A[part2] + '==';
}
return base64;
}
</script>
<script language="vbscript">
function vbGetGBCode(str)
dim i, length, s
length = len(str)
for i=1 to length
hexCode = hex(asc(str.charAt(i-1)))
if (len(hexCode) mod 2) = 0 then
s = s & hexCode
else
s = s & "0" & hexCode
end if
next
vbGetGBCode = s
end function
</script>
<script language="javascript">
String.prototype.getGBCode = function()
{
return vbGetGBCode(this);
}
</script>
发表评论
-
TEA算法的VB实现代码的使用说明
2008-12-30 11:28 1920自从公开了TEA算法的VB代码之后一直有人追问我如何调用这两个 ... -
TEA算法的VB实现代码
2008-12-30 11:02 1631前些日子不少人都要挂QQ,有客户需求就自然有人去研究,所以不少 ... -
QQ通讯协议
2008-12-30 10:56 4173协议说明: 协议由报文 ... -
hoxede的QQ填充算法和TEA 加解密的python实现
2008-12-30 10:31 2857""" The MIT Lic ... -
如何从 Visual Basic 中调用 GetNetworkParams / GetAdapter
2008-12-30 09:52 16761. 启动一个新的 Visual Basic 标准 EX ... -
VB调用GetAdaptersInfo 的正确方法
2008-12-30 09:51 2696网上的教程没有一个能在多网卡或多IP下用的,总是在 Cop ... -
VB做的EXE文件设参数
2008-12-29 12:26 1162这个其实很简单 在 Private Sub Form_L ... -
VB常用字符串函数
2008-12-29 12:26 14681. ASC(X),Chr(X):转换字 ... -
VB常用函数
2008-12-29 12:25 22741. Time 返回系统时钟的当前时间。 Date 返回 ... -
VB使用*.res资源文件
2008-12-29 12:23 1635你一定也常常因苦于无法组织自己程序中大量的picture,而头 ... -
在不同的模式下实现定时关闭计算机
2008-12-29 12:20 844Option Explicit Const SM_CLEANB ... -
强制关闭指定QQ号
2008-12-29 12:19 1298'添加 Text1 Command1 ... -
VB读取武林外传内存地址
2008-12-29 12:18 2094一 模块代码 复制内容到剪贴板 代码: Option Expl ... -
怎么编程把用户名,密码提交到网页上的登录页?
2008-12-29 12:06 1426首先在程序中加入Webbrowser控件并加入引用 Micro ... -
在XP/2K 任务管理器的进程列表中隐藏当前进程
2008-12-29 12:05 1225新建一个模块,把以下代码复制进去,然后在load中调用即可实现 ... -
用VB制作IE工具条自定义按钮
2008-12-29 12:04 1182Private Sub UserControl_Resize( ... -
Webbrowser(Internet 控件)属性方法事件一览表
2008-12-29 11:56 4769想找个Webbrowser控件的详细使用手册,网上找了好久,都 ... -
使用vbs下载文件
2008-12-29 11:52 1520使用vbs下载文件 iLocal=LCase(Wscript. ... -
如何用VB制作半透明窗体?
2008-12-29 11:51 1666函数SetLayeredWindowAttributes ... -
vb api 控制 任务栏 桌面 托盘。。
2008-12-29 11:45 2080VB无疑是最先进的编程 ...
相关推荐
f2b - 对目录及其文件进行 base64 编码/解码的脚本文件
# 执行脚本即可生成与之对应的txt文件,文件内存放base64编码 #功能验证:打开浏览器在地址栏输入data:image/png;base64,base64文件内容 回车即可显示原图片 #=======================参数区域=====================...
Inno Setup中没有提供处理Base64编码和解码的函数,一般遇到Base64编码时需要使用额外的工具。 本Inno Setup脚本代码可直接嵌入到[Code]使用,简单方便。
base64编码转图片.py
利用windows XP系统自带命令编写BASE64转换程序
Base58编码解码C语言实现。 Base58是区块链中使用的一种编码方法。 文件列表: base58.h, base58.cpp, test.cpp。 包含测试工程: VC++6.0, VC++2008, VC++2013, CentOS7-x64+gcc-4.8.5.20150623+cmake。 提供此源码...
主要介绍了Python简单实现Base64编码和解码的方法,结合具体实例形式分析了Python实现base64编码解码相关函数与使用技巧,需要的朋友可以参考下
flash AS 脚本编程 flash AS 脚本编程 flash AS 脚本编程
对文件进行zip压缩 和base64加密和解密的几个工具类
基于Python的混合语言编程及其实现研究全文共2页,当前为第1页。基于Python的混合语言编程及其实现研究全文共2页,当前为第1页。基于Python的混合语言编程及其实现研究 基于Python的混合语言编程及其实现研究全文共2...
Shell脚本编程100例。 融汇 shell 脚本知识点,集大成之作。 本书实在是学习、进修、面试、居家旅行必备精品!
什么是脚本编程什么是脚本编程什么是脚本编程什么是脚本编程
面向Arcgis的python脚本编程
Unity 3D脚本编程-使用C#语言开发跨平台游戏
以前写过一个很简单的,最近要用到,稍微加强了一下,一般图片转BASE64就用在网页的img标签中,所以特别为些做了些方便的小优化。 增加了可以从BASE64直接转化为图片的功能。 源码基于.NET 2.0,使用VS 2012编写
Unity 3D脚本编程:使用C#语言开发跨平台游戏以Unity 3D的跨平台基础Mono以及其游戏脚本语言C#为基础进行讲解
面向ArcGIS的Python脚本编程
TIA Portal WinCC Engineering V17 – VBS脚本编程参考手册
base64中文加密 注意中文编码为UTF-8