base64编码

合集下载

base64解析

base64解析

base64解析
base64编码是一种用64个字符来表示任意二进制数据的方法。

它是一种简单
的文本编码方式,可以将任何类型的文本或二进制数据编码为文本文件,例如电子邮件附件,图像文件或其他二进制数据文件。

Base64编码的性质非常强,使用
base64编码可以将任何字符、数字和控制字符统一转换为64个字符组成的字符串,比其他任何字符串编码都要有效得多,以节省空间,保护数据完整性,防止数据泄漏。

Base64编码的优点很多,首先,它有效地解决了字符编码的繁琐问题,编码
规则简洁易懂,能够有效缩短图片信息在文件传输过程中的传输时间和存储空间。

它还支持大多数常用浏览器,并且极其方便,可以简单方便地对图片文件和文本文件进行编解码,从而能够轻松地实现图片保护,确保数据的真实性,避免图片被破解和失真。

总之,base64编码是一种强大,有效,安全的编码方式,在文件传输、信息加密和从字符串或二进制数据文件提取信息等方面都有重要作用,今后传输文件和安全传输信息将会更加容易,更安全。

64位字符串的编码解码[转]

64位字符串的编码解码[转]

64位字符串的编码解码[转]⼀. Base64的编码规则Base64编码的思想是是采⽤64个基本的ASCII码字符对数据进⾏重新编码。

它将需要编码的数据拆分成字节数组。

以3个字节为⼀组。

按顺序排列24 位数据,再把这24位数据分成4组,即每组6位。

再在每组的的最⾼位前补两个0凑⾜⼀个字节。

这样就把⼀个3字节为⼀组的数据重新编码成了4个字节。

当所要编码的数据的字节数不是3的整倍数,也就是说在分组时最后⼀组不够3个字节。

这时在最后⼀组填充1到2个0字节。

并在最后编码完成后在结尾添加1到2个 “=”。

例:将对ABC进⾏BASE64编码:1、⾸先取ABC对应的ASCII码值。

A(65)B(66)C(67);2、再取⼆进制值A(01000001)B(01000010)C(01000011);3、然后把这三个字节的⼆进制码接起来(010000010100001001000011);4、再以6位为单位分成4个数据块,并在最⾼位填充两个0后形成4个字节的编码后的值,(00010000)(00010100)(00001001)(00000011),其中蓝⾊部分为真实数据;5、再把这四个字节数据转化成10进制数得(16)(20)(9)(3);6、最后根据BASE64给出的64个基本字符表,查出对应的ASCII码字符(Q)(U)(J)(D),这⾥的值实际就是数据在字符表中的索引。

注:BASE64字符表:ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/⼆.解码规则解码过程就是把4个字节再还原成3个字节再根据不同的数据形式把字节数组重新整理成数据。

三. C#中的实现编码:byte[] bytes = Encoding.Default.GetBytes("要转换的字符"); string str = Convert.ToBase64String(bytes);解码:byte[] outputb = Convert.FromBase64String(str); string orgStr = Encoding.Default.GetString(outputb);C#图⽚的Base64编码和解码图⽚的Base64编码:System.IO.MemoryStream m = new System.IO.MemoryStream();System.Drawing.Bitmap bp = new System.Drawing.Bitmap(@“c:\demo.GIF”);bp.Save(m, System.Drawing.Imaging.ImageFormat.Gif);byte[]b= m.GetBuffer();string base64string=Convert.ToBase64String(b);Base64字符串解码:byte[] bt = Convert.FromBase64String(base64string);System.IO.MemoryStream stream = new System.IO.MemoryStream(bt);Bitmap bitmap = new Bitmap(stream);pictureBox1.Image = bitmap;。

Base64编码与解码原理

Base64编码与解码原理

Base64编码与解码原理Base64编码是使⽤64个可打印ASCII字符(A-Z、a-z、0-9、+、/)将任意字节序列数据编码成ASCII字符串,另有“=”符号⽤作后缀⽤途。

base64索引表base64编码与解码的基础索引表如下base64编码原理(1)base64编码过程Base64将输⼊字符串按字节切分,取得每个字节对应的⼆进制值(若不⾜8⽐特则⾼位补0),然后将这些⼆进制数值串联起来,再按照6⽐特⼀组进⾏切分(因为2^6=64),最后⼀组若不⾜6⽐特则末尾补0。

将每组⼆进制值转换成⼗进制,然后在上述表格中找到对应的符号并串联起来就是Base64编码结果。

由于⼆进制数据是按照8⽐特⼀组进⾏传输,因此Base64按照6⽐特⼀组切分的⼆进制数据必须是24⽐特的倍数(6和8的最⼩公倍数)。

24⽐特就是3个字节,若原字节序列数据长度不是3的倍数时且剩下1个输⼊数据,则在编码结果后加2个=;若剩下2个输⼊数据,则在编码结果后加1个=。

完整的Base64定义可见RFC1421和RFC2045。

因为Base64算法是将3个字节原数据编码为4个字节新数据,所以Base64编码后的数据⽐原始数据略长,为原来的4/3。

(2)简单编码流程下⾯举例对字符串“ABCD”进⾏base64编码:对于不⾜6位的补零(图中浅红⾊的4位),索引为“A”;对于最后不⾜3字节,进⾏补零处理(图中红⾊部分),以“=”替代,因此,“ABCD”的base64编码为:“QUJDRA==”。

base64解码原理(1)base64解码过程base64解码,即是base64编码的逆过程,如果理解了编码过程,解码过程也就容易理解。

将base64编码数据根据编码表分别索引到编码值,然后每4个编码值⼀组组成⼀个24位的数据流,解码为3个字符。

对于末尾位“=”的base64数据,最终取得的4字节数据,需要去掉“=”再进⾏转换。

解码过程可以参考上图,逆向理解:“QUJDRA==” ——>“ABCD”1)将所有字符转化为ASCII 码;2)将ASCII 码转化为8位⼆进制;3)将8位⼆进制3个归成⼀组(不⾜3个在后边补0)共24位,再拆分成4组,每组6位;4)将每组6位的⼆进制转为⼗进制;5)从Base64编码表获取⼗进制对应的Base64编码;(2)base64解码特点base64编码中只包含64个可打印字符,⽽PHP在解码base64时,遇到不在其中的字符时,将会跳过这些字符,仅将合法字符组成⼀个新的字符串进⾏解码。

Base64编解码

Base64编解码

Base64编解码一、编码原理Base64是一种基于64个可打印字符来表示二进制数据的表示方法。

由于2的6次方等于64,所以每6个比特为一个单元,对应某个可打印字符。

三个字节有24个比特,对应于4个Base64单元,即3个字节需要用4个可打印字符来表示。

编码后的数据比原来的数据略长,是原来的4/3倍。

它可用来作为电子邮件的传输编码。

在Base64中的可打印字符包括字母A-Z、a-z、数字0-9 ,这样共有62个字符,此外两个可打印符号在不同的系统中而不同(Base64de 编码表如下所示)。

Base64常用于在通常处理文本数据的场合,表示、传输、存储一些二进制数据。

包括MIME的email,email via MIME, 在XML中存储复杂数据.Base64编码表二、编码流程步骤1:将要编码的所有字符都转化成对应的ASCII码。

步骤2:将所有的ASCII码转换成对应的8位长的二进制数。

步骤3:将所得的二进制数从高位到低位开始分成6位一组,最后一组不足六的则补充0步骤4:将每组二进制数转换成十进制数,然后对照base64的编码表查找得到相应的编码。

注意:1、要求被编码字符是8bit的,所以须在ASCII编码范围内,\u0000-\u00ff,中文就不行。

2、如果被编码的字符串中字符的个数为3的倍数,按照上面的步骤即可得到正确的base64编码。

但是如果不是3的倍数则要分情况讨论。

如果是3的倍数余1,则要在编好的码字后面加上两个“=”,如果是3的倍数余2,这要在编好的码字后面加上一个“=”。

(例如w的base64编码为dw==,w1的base64编码为dzE=)下面我们来对具体的字符串进行编码举例,以便更好的理解编码流程:编码「Man」在此例中,Base64算法将三个字符编码为4个字符特殊情况A的编码为QQ= =BC的编码为QkM=三、核心算法程序算法的基本原理如下:由于每次转换都需要6个bit,而这6个bit可能都来自一个字节,也可以来自前后相临的两个字节。

BASE64编码规则

BASE64编码规则

(一)、BA SE64编码规则及JAVA中的使用1、编码规则:Base64编码要求把3个8位字节(3*8=24)转化为4个6位的字节(4*6=24),之后在6位的前面补两个0,形成8位一个字节的形式。

例如字符串“张3” :11010101 11000101 00110011转换后:00110101 00011100 00010100 00110011用十进制表示即为:53 34 20 51这个并不是最终的结果,还需要根据Base64的编码表查询出转换后的值。

下面就是BASE64编码表:Table 1: The Base64 AlphabetValue Encoding Value Encoding Value Encoding Value Encoding0 A 17 R 34 i 51 z1 B 18 S 35 j 52 02 C 19 T 36 k 53 13 D 20 U 37 l 54 24 E 21 V 38 m 55 35 F 22 W 39 n 56 46 G 23 X 40 o 57 57 H 24 Y 41 p 58 68 I 25 Z 42 q 59 79 J 26 a 43 r 60 810 K 27 b 44 s 61 911 L 28 c 45 t 62 +12 M 29 d 46 u 63 /13 N 30 e 47 v (pad) =14 O 31 f 48 w15 P 32 g 49 x16 Q 33 h 50 y以上一共是64个编码,这也是Base64名称的由来,编码的编号对应的是得出的新字节的十进制值。

因此,上例中字符串“张3”经过编码后就成了字符串“1iUz”了。

当代码量不是3的整数倍时,代码量/3的余数自然就是2或者1。

转换的时候,结果不够6位的用0来补上相应的位置,之后再在6位的前面补两个0。

转换完空出的结果就用就用“=”来补位。

譬如结果若最后余下的为2个字节的“张”:字符串“张”11010101 HEX:D5 11000101 HEX:C500110101 00011100 00010100十进制53 十进制34 十进制20 pad字符’1’ 字符’i’ 字符’U’ 字符’=’这样,最后的2个字节被整理成了“1iU=”。

base64编解码

base64编解码
base64编解码
BASE64编码是一种常用的将二进制数据转换为可打印字符的编码。与HEX显示相比,它占用的空间较小。BASE64编码在RFC 3548(参见扩展阅读)中定义。
1、base64编解码原理
将数据编码成BASE64编码时,以3字节数据为一组,转换为24bit的二进制数,将24bit的二进制数分成四组,每组6bit。对于每一组,得到一个数字:0-63。然后根据这个数字查表即得到结果。表如下:
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
/
比如有数据:0x30 0x82 0x02
编码过程如下:
1)得到16进制数据:30 82 02
2)得到二进制数据:00110000 10000010 00000010
3)每6bit分组:001100 001000 001000 000010
3)输入数据最后编码是2个字节(输入数据字节数除3余2),则需要填充1个"=",因为补齐6比特,需要加一个00。
举例如下:
对0x30编码:
1) 0x30的二进制为:00110000
2)分组为:001100 00
3)填充2个00:001100 000000
4)得到数字:12 0Байду номын сангаас

BASE64编码

BASE64编码

BASE64编码BASE64编码什么是BASE64编码,解决什么问题?定义:是⼀种编码⽅式,Base64编码是从⼆进制到字符的过程,8Bit字节代码的编码⽅式之⼀;特点:采⽤Base64编码具有不可读性,需要解码后才能阅读;应⽤:可⽤于在HTTP环境下传递较长的标识信息;经常⽤作⼀个简单的加密 (编码不是加密)来保护某些数据。

注:编码和加密的区别在于编码是通常希望别⼈解码的。

⽽加密是不希望的。

编码更多的是为了转换格式,加密是为了安全。

解码,是编码的逆过程。

解密,是加密的逆过程。

原理转换表(摘⾃百度百科):索引对应字符索引对应字符索引对应字符索引对应字符0A17R34i51z1B18S35j5202C19T36k5313D20U37l5424E21V38m5535F22W39n5646G23X40o5757H24Y41p5868I25Z42q5979J26a43r60810K27b44s61911L28c45t62+12M29d46u63/13N30e47v14O31f48w15P32g49x16Q33h50y例⼦(摘⾃百度百科):转换前 10101101,10111010,01110110转换后 00101011, 00011011 ,00101001 ,00110110⼗进制 43 27 41 54对应码表中的值 r b p 2所以上⾯的24位编码,编码后的Base64值为 rbp2解码同理,把 rbq2 的⼆进制位连接上再重组得到三个8位值,得出原码。

(解码只是编码的逆过程,有关MIME的RFC还有很多,如果需要详细情况请⾃⾏查找。

)第⼀个字节,根据源字节的第⼀个字节处理。

规则:源第⼀字节右移两位,去掉低2位,⾼2位补零。

既:00 + ⾼6位第⼆个字节,根据源字节的第⼀个字节和第⼆个字节联合处理。

规则如下,第⼀个字节⾼6位去掉然后左移四位,第⼆个字节右移四位即:源第⼀字节低2位 + 源第2字节⾼4位第三个字节,根据源字节的第⼆个字节和第三个字节联合处理,规则第⼆个字节去掉⾼4位并左移两位(得⾼6位),第三个字节右移6位并去掉⾼6位(得低2位),相加即可第四个字节,规则,源第三字节去掉⾼2位即可原理(摘⾃百度百科):转码过程例⼦:3 * 8 =4 * 6内存1个字节占8位转前: s 1 3先转成ascii:对应 115 49 512进制: 01110011 00110001 001100116个⼀组(4组) 011100110011000100110011然后才有后⾯的 011100 110011 000100 110011然后计算机⼀个字节占8位,不够就⾃动补两个⾼位0了所以有了⾼位补0科学计算器输⼊ 00011100 00110011 00000100 00110011得到 28 51 4 51查下对照表 c z E z运⾏环境python在线加密解密参考资料。

base64 解码 原理

base64 解码 原理

base64 解码原理
Base64是一种编码方式,它将二进制数据转换为可打印字符
的ASCII格式。

其原理如下:
1. 将待编码的数据划分为连续的24位(即3个字节)的分组。

2. 将每个24位的分组划分为4个6位的子分组。

3. 根据Base64编码表,将每个6位的子分组转换为对应的可
打印字符。

4. 如果最后的输入数据长度不足3个字节,会进行填充操作。

一般使用'='字符进行填充。

这样,在Base64编码中,一个3字节的二进制数据通过编码
后会变成4个字符,并且编码后的数据长度总是为4的倍数。

当需要对Base64编码进行解码时,可以按照以下步骤进行:
1. 将待解码的数据划分为连续的4个字符的分组。

2. 根据Base64解码表,将每个字符的编码值转换为对应的6
位二进制数据。

3. 将每个6位的子分组合并为一个24位的分组。

4. 将每个24位的分组划分为3个8位的子分组,并转换为对
应的字节数据。

5. 如果解码后的数据长度大于待解码的数据长度,则剔除填充的字节。

通过以上步骤,就可以将Base64编码的数据解码回原始的二
进制数据。

需要注意的是,Base64编码只是一种编码方式,它并不对数
据进行加密或压缩。

它主要用于在文本协议中传输二进制数据,或者在文本环境中嵌入二进制数据。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

矛与盾的较量(4)——奇妙的Base64编码下载本节例子程序 (6.93 KB)各位看官应该都是资深的网虫了,小弟斗胆在此问问大家,平时上网时,除了泡MM、到论坛灌水、扔版砖……之外,进行的最多的是什么活动?对了,你一定会说:是收发电子邮件!(谁敢说自己没收/发过电子邮件的?拉出去枪毙了!!)收/发E-mail的时候有一个安全性的问题——假想一下,你花了一整天时间给系花写的情书,在发送的过程中被隔壁宿舍张三那小子截获了(难道他是黑客??),更糟的是他是你的情敌啊……天,后果不堪设想!!因此,我们必须有一种比较可靠的加密方法,能够对电子邮件的明文进行转换,至少要得出一个无法被别人一眼就看出内容来的东西,而且编码/解码的速度还要足够快。

(这时你可以再假想一下啦,张三那家伙截获了你的肉麻情书,可是他一看:“咦?怎么乱七八糟的?垃圾邮件!!”——这样一来你不就逃过大难了?!)Base64就是在这种背景下产生的加密方法。

它的特点是:1、速度非常快。

2、能够将字符串A转换成字符串B,而且如果你光看字符串B,是绝对猜不出字符串A的内容来的。

不信吗?让我们来看看下面这串东西:xOO6w6Osu7bTrbniwdnAz8LetcTnzbfXzOy12KOh呵呵,是什么啊?猜出来了吗?其实它就是下面这段文字经过Base64编码产生的东东:你好,欢迎光临老罗的缤纷天地!介绍说完啦,让我们开始探讨实质性的东西。

Base64是网络上最常见的用于传输8Bit字节代码的编码方式之一,大家可以查看RFC2045~RFC2049,上面有MIME的详细规范。

Base64要求把每三个8Bit的字节转换为四个6Bit的字节(3*8 = 4*6 = 24),然后把6Bit再添两位高位0,组成四个8Bit的字节,也就是说,转换后的字符串理论上将要比原来的长1/3。

这样说会不会太抽象了?不怕,我们来看一个例子:应该很清楚了吧?上面的三个字节是原文,下面的四个字节是转换后的Base64编码,其前两位均为0。

转换后,我们用一个码表来得到我们想要的字符串(也就是最终的Base64编码),这个表是这样的:(摘自RFC2045)Table 1: The Base64 AlphabetValue Encoding Value Encoding Value Encoding Value Encoding0 A 17 R 34 i 51 z1 B 18 S 35 j 52 02 C 19 T 36 k 53 13 D 20 U 37 l 54 24 E 21 V 38 m 55 35 F 22 W 39 n 56 46 G 23 X 40 o 57 57 H 24 Y 41 p 58 68 I 25 Z 42 q 59 79 J 26 a 43 r 60 810 K 27 b 44 s 61 911 L 28 c 45 t 62 +12 M 29 d 46 u 63 /13 N 30 e 47 v14 O 31 f 48 w (pad) =15 P 32 g 49 x16 Q 33 h 50 y让我们再来看一个实际的例子,加深印象!所以上面的24位编码,编码后的Base64值为 rbp2解码同理,把 rbq2 的二进制位连接上再重组得到三个8位值,得出原码。

(解码只是编码的逆过程,在此我就不多说了,另外有关MIME的RFC还是有很多的,如果需要详细情况请自行查找。

)用更接近于编程的思维来说,编码的过程是这样的:第一个字符通过右移2位获得第一个目标字符的Base64表位置,根据这个数值取到表上相应的字符,就是第一个目标字符。

然后将第一个字符左移4位加上第二个字符右移4位,即获得第二个目标字符。

再将第二个字符左移2位加上第三个字符右移6位,获得第三个目标字符。

最后取第三个字符的右6位即获得第四个目标字符。

在以上的每一个步骤之后,再把结果与 0x3F 进行 AND 位操作,就可以得到编码后的字符了。

(感谢Athena指出以上描述中原有的一些错误!^_^)So easy! That’s all!!!可是等等……聪明的你可能会问到,原文的字节数量应该是3的倍数啊,如果这个条件不能满足的话,那该怎么办呢?我们的解决办法是这样的:原文的字节不够的地方可以用全0来补足,转换时Base64编码用=号来代替。

这就是为什么有些Base64编码会以一个或两个等号结束的原因,但等号最多只有两个。

因为:余数 = 原文字节数 MOD 3所以余数任何情况下都只可能是0,1,2这三个数中的一个。

如果余数是0的话,就表示原文字节数正好是3的倍数(最理想的情况啦)。

如果是1的话,为了让Base64编码是4的倍数,就要补2个等号;同理,如果是2的话,就要补1个等号。

讲到这里,大伙儿应该全明白了吧?如果还有不清楚的话就返回去再仔细看看,其实不难理解的。

下面我给出一个演示Base64编码/解码的程序,希望能对您有用。

同时也希望您帮我完善它,利用它做出更多的用途,到时别忘了通知我一声啊!(我现在太忙了)DLL的源代码:Base64Dll.asm;***********************************************;程序名称:演示Base64编码/解码原理;作者:罗聪;日期:2002-9-14;出处:(老罗的缤纷天地);注意事项:如欲转载,请保持本程序的完整,并注明:;转载自“老罗的缤纷天地”();***********************************************.386.model flat,stdcalloption casemap:noneinclude \masm32\include\windows.incinclude \masm32\include\kernel32.incinclude \masm32\include\user32.incincludelib \masm32\lib\kernel32.libincludelib \masm32\lib\user32.libDllEntry proto:HINSTANCE,:DWORD,:DWORDBase64Encode proto:DWORD,:DWORDBase64Decode proto:DWORD,:DWORD.data;Base64 -> ASCII mapping tablebase64_alphabet db"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghij klmnopqrstuvwxyz0123456789+/=";ASCII -> Base64 mapping tablebase64table db43dup(255)db62,255,255,255,63,52,53,54,55,56,57,58,59,60,61,255db255,255,0,255,255,255,0,1,2,3,4,5,6,7,8,9,10,11,12,13db14,15,16,17,18,19,20,21,22,23,24,25,255,255,255,255db255,255,26,27,28,29,30,31,32,33,34,35,36,37,38db39,40,41,42,43,44,45,46,47,48,49,50,51db132dup(255).codeDllEntry proc hInst: HINSTANCE, reason:DWORD, reserved1:DWORD mov eax, TRUEretDllEntry endp;**********************************************************;函数功能:进行Base64编码;参数:; source = 传入的字符串; destination = 返回的编码;**********************************************************Base64Encode proc uses ebx edi esi source:DWORD, destination:DWORD LOCAL sourcelen:DWORDinvoke lstrlen, sourcemov sourcelen,eaxmov esi, sourcemov edi, destination@@base64loop:xor eax,eax.if sourcelen ==1lodsb;source ptr + 1mov ecx,2;bytes to output = 2mov edx,03D3Dh;padding = 2 bytedec sourcelen ;length - 1.elseif sourcelen ==2lodsw;source ptr + 2mov ecx,3;bytes to output = 3mov edx,03Dh;padding = 1 bytesub sourcelen,2;length - 2.elselodsdmov ecx,4;bytes to output = 4xor edx,edx;padding = 0 bytedec esi;source ptr + 3 (+4-1)sub sourcelen,3;length - 3.endifxchg al,ah;flip eax completelyrol eax,16;can this be done fasterxchg al,ah@@:push eaxand eax,0FC000000h;get the last 6 high bitsrol eax,6;rotate them into almov al,byte ptr[offset base64_alphabet +eax];get encode character stosb;write to destinationpop eaxshl eax,6;shift left 6 bitsdec ecxjnz@B ;loopcmp sourcelen,0jnz@@base64loop ;main loopmov eax,edx;add padding and null terminatestosdretBase64Encode endp;**********************************************************;函数功能:进行Base64解码;参数:; source = 传入的编码; destination = 返回的字符串;**********************************************************Base64Decode proc uses ebx edi esi source:DWORD, destination:DWORD LOCAL sourcelen:DWORDinvoke lstrlen, sourcemov sourcelen,eaxmov esi, source ;esi <- sourcemov edi, destination ;edi <- destinationmov ecx, sourcelenshr ecx,2cld;-------------[decoding part]---------------@@outer_loop:push ecxmov ecx,4xor ebx,ebxlodsd@@inner_loop:push eaxand eax,0ffhmov al,byte ptr[offset base64table +eax]cmp al,255je@@invalid_charshl ebx,6or bl,alpop eaxshr eax,8dec ecxjnz @@inner_loopmov eax,ebxshl eax,8xchg ah,alror eax,16xchg ah,alstosddec edipop ecxdec ecxjnz @@outer_loopxor eax,eaxjmp @@decode_done;-------------------------------------------@@invalid_char:mov eax,-1@@decode_done:retBase64Decode ENDPend DllEntry;******************** over ******************** ;by LC测试程序:base64.asm;*********************************************** ;程序名称:演示Base64编码/解码原理;作者:罗聪;日期:2002-9-14;出处:(老罗的缤纷天地);注意事项:如欲转载,请保持本程序的完整,并注明:;转载自“老罗的缤纷天地”();***********************************************.386.model flat,stdcalloption casemap:noneinclude \masm32\include\windows.incinclude \masm32\include\kernel32.incinclude \masm32\include\user32.incinclude Base64Dll.incincludelib \masm32\lib\kernel32.libincludelib \masm32\lib\user32.libincludelib Base64Dll.libWndProc proto:DWORD,:DWORD,:DWORD,:DWORD.constIDC_BUTTON_ENCODE equ3000IDC_BUTTON_DECODE equ3001IDC_EDIT_INPUT equ3002MAXSIZE equ260.dataszDlgName db"lc_dialog",0szCaption db"BASE64 demo by LC",0szBuffer db255dup(0)szText db340dup(0)szMsg db450dup(0)szTemplate_Encode db"字符串""%s"" 的Base64编码是:",13,10,13,10, "%s",0szTemplate_Decode db"编码""%s"" 经过Base64还原后的字符串是:", 13,10,13,10,"%s",0.codemain:invoke GetModuleHandle, NULLinvoke DialogBoxParam,eax,offset szDlgName,0, WndProc,0invoke ExitProcess,eaxWndProc proc uses edi hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAMLOCAL hEdit: HWND.if uMsg == WM_CLOSEinvoke EndDialog, hWnd,0.elseif uMsg == WM_COMMANDmov eax, wParammov edx,eaxshr edx,16movzx eax,ax.if edx== BN_CLICKED.if eax== IDCANCELinvoke EndDialog, hWnd, NULL.elseif eax== IDC_BUTTON_ENCODE ||eax== IDOK;取得用户输入的字符串:invoke GetDlgItemText, hWnd, IDC_EDIT_INPUT,addr szBuffer,255;进行ASCII->Base64 转换:invoke Base64Encode,addr szBuffer,addr szText;格式化输出:invoke wsprintf,addr szMsg,addr szTemplate_Encode,addr szBuffer, addr szText;显示结果:invoke MessageBox, hWnd,addr szMsg,addr szCaption, MB_OK.elseif eax== IDC_BUTTON_DECODE;取得用户输入的字符串:invoke GetDlgItemText, hWnd, IDC_EDIT_INPUT,addr szBuffer,255;进行Base64->ASCII 转换:invoke Base64Decode,addr szBuffer,addr szText;格式化输出:invoke wsprintf,addr szMsg,addr szTemplate_Decode,addr szBuffer, addr szText;显示结果:invoke MessageBox, hWnd,addr szMsg,addr szCaption, MB_OK.endif;全选edit里面的内容:invoke GetDlgItem, hWnd, IDC_EDIT_INPUTinvoke SendMessage,eax, EM_SETSEL,0,-1.endif.elsemov eax, FALSEret.endifmov eax, TRUEretWndProc endpend main;******************** over ********************;by LC测试程序的资源文件:base64.rc#include "resource.h"#define IDC_BUTTON_ENCODE 3000#define IDC_BUTTON_DECODE 3001#define IDC_EDIT_INPUT 3002#define IDC_STATIC -1LC_DIALOG DIALOGEX 10, 10, 195, 60STYLE DS_SETFONT | DS_CENTER | WS_MINIMIZEBOX | WS_VISIBLE | WS_CAPTION |WS_SYSMENUCAPTION "Base64 demo by LC"FONT 9, "宋体", 0, 0, 0x0BEGINLTEXT "请输入字符串:", IDC_STATIC, 11, 7, 130, 10EDITTEXT IDC_EDIT_INPUT, 11, 20, 173, 12, ES_AUTOHSCROLL DEFPUSHBUTTON "编码(&E)", IDC_BUTTON_ENCODE, 38, 39, 52, 15PUSHBUTTON "解码(&D)", IDC_BUTTON_DECODE, 104, 39, 52, 15 END如果你发现了有bug,一定要告诉我啊,并请来信讨论!lcother@最后给大家留下一个小小的习题,你知道下面这串Base64编码的原文是什么吗?:)0LvQu8T6xM3XxdDU19O/tM3qztK1xEJhc2U2NL3Ms8yjoSCjuqOp老罗2002-9-14 版权所有转载请注明出处Home / Index罗聪。

相关文档
最新文档