﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-jasmine214--love-随笔分类-加密解密</title><link>http://www.blogjava.net/jasmine214--love/category/45444.html</link><description /><language>zh-cn</language><lastBuildDate>Sat, 26 Jun 2010 05:30:18 GMT</lastBuildDate><pubDate>Sat, 26 Jun 2010 05:30:18 GMT</pubDate><ttl>60</ttl><item><title>Base64编码---加密方法</title><link>http://www.blogjava.net/jasmine214--love/archive/2010/06/15/323626.html</link><dc:creator>幻海蓝梦</dc:creator><author>幻海蓝梦</author><pubDate>Tue, 15 Jun 2010 09:16:00 GMT</pubDate><guid>http://www.blogjava.net/jasmine214--love/archive/2010/06/15/323626.html</guid><wfw:comment>http://www.blogjava.net/jasmine214--love/comments/323626.html</wfw:comment><comments>http://www.blogjava.net/jasmine214--love/archive/2010/06/15/323626.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jasmine214--love/comments/commentRss/323626.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jasmine214--love/services/trackbacks/323626.html</trackback:ping><description><![CDATA[原文：<a href="http://www.luocong.com/articles/show_article.asp?Article_ID=17">http://www.luocong.com/articles/show_article.asp?Article_ID=17</a><br />java:http://www.zhuoda.org/elite/34479.html<br /><br />各位看官应该都是资深的网虫了，小弟斗胆在此问问大家，平时上网时，除了泡MM、到论坛灌水、扔版砖……之外，进行的最多的是什么活动？对了，你一定会说：是收发电子邮件！（谁敢说自己没收/发过电子邮件的？拉出去枪毙了！！）<br /><br />收/发E-mail的时候有一个安全性的问题——假想一下，你花了一整天时间给系花写的情书，在发送的过程中被隔壁宿舍张三那小子截获了（难道他是黑客？？），更糟的是他是你的情敌啊……天，后果不堪设想！！因此，我们必须有一种比较可靠的加密方法，能够对电子邮件的明文进行转换，至少要得出一个无法被别人一眼就看出内容来的东西，而且编码/解码的速度还要足够快。（这时你可以再假想一下啦，张三那家伙截获了你的肉麻情书，可是他一看：“咦？怎么乱七八糟的？垃圾邮件！！”——这样一来你不就逃过大难了？！）<br /><br />Base64就是在这种背景下产生的加密方法。它的特点是：1、速度非常快。2、能够将字符串A转换成字符串B，而且如果你光看字符串B，是绝对猜不出字符串A的内容来的。不信吗？让我们来看看下面这串东西：<br /><br /><font color="#0099ff">xOO6w6Osu7bTrbniwdnAz8LetcTnzbfXzOy12KOh</font><br /><br />呵呵，是什么啊？猜出来了吗？其实它就是下面这段文字经过Base64编码产生的东东：<br /><br /><font color="#0099ff">你好，欢迎光临老罗的缤纷天地！</font><br /><br />介绍说完啦，让我们开始探讨实质性的东西。<br /><br />Base64是网络上最常见的用于传输8Bit字节代码的编码方式之一，大家可以查看RFC2045～RFC2049，上面有MIME的详细规范。<br /><br />Base64要求把每三个8Bit的字节转换为四个6Bit的字节（3*8 = 4*6 = 24），然后把6Bit再添两位高位0，组成四个8Bit的字节，也就是说，转换后的字符串理论上将要比原来的长1/3。<br /><br />这样说会不会太抽象了？不怕，我们来看一个例子：<br /><br /><table border="1"><tbody><tr><td>转换前</td><td>aaaaaabb</td><td>ccccdddd</td><td>eeffffff</td><td></td></tr><tr><td>转换后</td><td>00aaaaaa</td><td>00bbcccc</td><td>00ddddee</td><td>00ffffff</td></tr></tbody></table><br />应该很清楚了吧？上面的三个字节是原文，下面的四个字节是转换后的Base64编码，其前两位均为0。<br /><br />转换后，我们用一个码表来得到我们想要的字符串（也就是最终的Base64编码），这个表是这样的：（摘自RFC2045）<br /><br /><br />                            Table 1: The Base64 Alphabet<br /><br />      Value Encoding  Value Encoding  Value Encoding  Value Encoding<br />           0 A            17 R            34 i            51 z<br />           1 B            18 S            35 j            52 0<br />           2 C            19 T            36 k            53 1<br />           3 D            20 U            37 l            54 2<br />           4 E            21 V            38 m            55 3<br />           5 F            22 W            39 n            56 4<br />           6 G            23 X            40 o            57 5<br />           7 H            24 Y            41 p            58 6<br />           8 I            25 Z            42 q            59 7<br />           9 J            26 a            43 r            60 8<br />          10 K            27 b            44 s            61 9<br />          11 L            28 c            45 t            62 +<br />          12 M            29 d            46 u            63 /<br />          13 N            30 e            47 v<br />          14 O            31 f            48 w         (pad) =<br />          15 P            32 g            49 x<br />          16 Q            33 h            50 y<br /><br /><br />让我们再来看一个实际的例子，加深印象！<br /><br /><table border="1"><tbody><tr><td>转换前</td><td>10101101</td><td>10111010</td><td>01110110</td><td></td></tr><tr><td>转换后</td><td>00101011</td><td>00011011</td><td>00101001</td><td>00110110</td></tr><tr><td>十进制</td><td>43</td><td>27</td><td>41</td><td>54</td></tr><tr><td>对应码表中的值</td><td>r</td><td>b</td><td>p</td><td>2</td></tr></tbody></table><br /><br />所以上面的24位编码，编码后的Base64值为 rbp2<br />解码同理，把 rbq2 的二进制位连接上再重组得到三个8位值，得出原码。<br />（解码只是编码的逆过程，在此我就不多说了，另外有关MIME的RFC还是有很多的，如果需要详细情况请自行查找。）<br /><br />用更接近于编程的思维来说，编码的过程是这样的：<br /><br />第一个字符通过右移2位获得第一个目标字符的Base64表位置，根据这个数值取到表上相应的字符，就是第一个目标字符。<br />然后将第一个字符左移4位加上第二个字符右移4位，即获得第二个目标字符。<br />再将第二个字符左移2位加上第三个字符右移6位，获得第三个目标字符。<br />最后取第三个字符的右6位即获得第四个目标字符。<br /><br />在以上的每一个步骤之后，再把结果与 0x3F 进行 AND 位操作，就可以得到编码后的字符了。<br /><br /><font color="#0099ff">（感谢 <font color="red">Athena</font> 指出以上描述中原有的一些错误！^_^）</font><br /><br />So easy! That’s all!!!<br /><br />可是等等……聪明的你可能会问到，原文的字节数量应该是3的倍数啊，如果这个条件不能满足的话，那该怎么办呢？<br /><br />我们的解决办法是这样的：原文的字节不够的地方可以用全0来补足，转换时Base64编码用=号来代替。这就是为什么有些Base64编码会以一个或两个等号结束的原因，但等号最多只有两个。因为：<br /><br />余数 = 原文字节数 MOD 3<br /><br />所以余数任何情况下都只可能是0，1，2这三个数中的一个。如果余数是0的话，就表示原文字节数正好是3的倍数（最理想的情况啦）。如果是1的话，为了让Base64编码是4的倍数，就要补2个等号；同理，如果是2的话，就要补1个等号。<br /><br />讲到这里，大伙儿应该全明白了吧？如果还有不清楚的话就返回去再仔细看看，其实不难理解的。<br /><br />下面我给出一个演示Base64编码/解码的程序，希望能对您有用。同时也希望您帮我完善它，利用它做出更多的用途，到时别忘了通知我一声啊！（我现在太忙了）<br /><br /><br /><b>DLL的源代码：Base64Dll.asm</b><br /><br /><table border="0" cellspacing="0" cellpadding="0" bgcolor="#fbedbb"><tbody><tr><td><a name="L1"><font color="#238e23">;***********************************************</font><br /><a name="L2"><font color="#238e23">;程序名称：演示Base64编码/解码原理</font><br /><a name="L3"><font color="#238e23">;作者：罗聪</font><br /><a name="L4"><font color="#238e23">;日期：2002-9-14</font><br /><a name="L5"><font color="#238e23">;出处：http://laoluoc.yeah.net（老罗的缤纷天地）</font><br /><a name="L6"><font color="#238e23">;注意事项：如欲转载，请保持本程序的完整，并注明：</font><br /><a name="L7"><font color="#238e23">;转载自“老罗的缤纷天地”（http://laoluoc.yeah.net）</font><br /><a name="L8"><font color="#238e23">;***********************************************</font><br /><a name="L9"><br /><a name="L10"><font color="#9932cd"><b>.</b></font><font color="#802000">386</font><br /><a name="L11"><font color="#9932cd"><b>.</b></font><font color="#ff0000">model</font><font color="#ff0000">flat</font><font color="#9932cd"><b>,</b></font><font color="#ff0000">stdcall</font><br /><a name="L12"><font color="#ff0000">option</font><font color="#ff0000">casemap</font><font color="#3080ca">:</font>none<br /><a name="L13"><br /><a name="L14"><font color="#ff8000">include</font> \masm32\include\windows.inc<br /><a name="L15"><font color="#ff8000">include</font> \masm32\include\kernel32.inc<br /><a name="L16"><font color="#ff8000">include</font> \masm32\include\user32.inc<br /><a name="L17"><font color="#ff8000">includelib</font> \masm32\lib\kernel32.lib<br /><a name="L18"><font color="#ff8000">includelib</font> \masm32\lib\user32.lib<br /><a name="L19"><br /><a name="L20">DllEntry        <font color="#ff0000">proto</font><font color="#3080ca">:</font>HINSTANCE<font color="#9932cd"><b>,</b></font><font color="#3080ca">:</font><font color="#ff0000">DWORD</font><font color="#9932cd"><b>,</b></font><font color="#3080ca">:</font><font color="#ff0000">DWORD</font><br /><a name="L21">Base64Encode    <font color="#ff0000">proto</font><font color="#3080ca">:</font><font color="#ff0000">DWORD</font><font color="#9932cd"><b>,</b></font><font color="#3080ca">:</font><font color="#ff0000">DWORD</font><br /><a name="L22">Base64Decode    <font color="#ff0000">proto</font><font color="#3080ca">:</font><font color="#ff0000">DWORD</font><font color="#9932cd"><b>,</b></font><font color="#3080ca">:</font><font color="#ff0000">DWORD</font><br /><a name="L23"><br /><a name="L24"><font color="#9932cd"><b>.</b></font><font color="#ff0000">data</font><br /><a name="L25"><font color="#238e23">;Base64 -&gt; ASCII mapping table</font><br /><a name="L26">base64_alphabet     <font color="#ff0000">db</font>    <font color="#0000ff">"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="</font><br /><a name="L27"><br /><a name="L28"><font color="#238e23">;ASCII -&gt; Base64 mapping table</font><br /><a name="L29">base64table         <font color="#ff0000">db</font><font color="#802000">43</font><font color="#ff0000">dup</font><font color="#ff00ff">(</font><font color="#802000">255</font><font color="#ff00ff">)</font><br /><a name="L30">                    <font color="#ff0000">db</font><font color="#802000">62</font><font color="#9932cd"><b>,</b></font><font color="#802000">255</font><font color="#9932cd"><b>,</b></font><font color="#802000">255</font><font color="#9932cd"><b>,</b></font><font color="#802000">255</font><font color="#9932cd"><b>,</b></font><font color="#802000">63</font><font color="#9932cd"><b>,</b></font><font color="#802000">52</font><font color="#9932cd"><b>,</b></font><font color="#802000">53</font><font color="#9932cd"><b>,</b></font><font color="#802000">54</font><font color="#9932cd"><b>,</b></font><font color="#802000">55</font><font color="#9932cd"><b>,</b></font><font color="#802000">56</font><font color="#9932cd"><b>,</b></font><font color="#802000">57</font><font color="#9932cd"><b>,</b></font><font color="#802000">58</font><font color="#9932cd"><b>,</b></font><font color="#802000">59</font><font color="#9932cd"><b>,</b></font><font color="#802000">60</font><font color="#9932cd"><b>,</b></font><font color="#802000">61</font><font color="#9932cd"><b>,</b></font><font color="#802000">255</font><br /><a name="L31">                    <font color="#ff0000">db</font><font color="#802000">255</font><font color="#9932cd"><b>,</b></font><font color="#802000">255</font><font color="#9932cd"><b>,</b></font><font color="#802000">0</font><font color="#9932cd"><b>,</b></font><font color="#802000">255</font><font color="#9932cd"><b>,</b></font><font color="#802000">255</font><font color="#9932cd"><b>,</b></font><font color="#802000">255</font><font color="#9932cd"><b>,</b></font><font color="#802000">0</font><font color="#9932cd"><b>,</b></font><font color="#802000">1</font><font color="#9932cd"><b>,</b></font><font color="#802000">2</font><font color="#9932cd"><b>,</b></font><font color="#802000">3</font><font color="#9932cd"><b>,</b></font><font color="#802000">4</font><font color="#9932cd"><b>,</b></font><font color="#802000">5</font><font color="#9932cd"><b>,</b></font><font color="#802000">6</font><font color="#9932cd"><b>,</b></font><font color="#802000">7</font><font color="#9932cd"><b>,</b></font><font color="#802000">8</font><font color="#9932cd"><b>,</b></font><font color="#802000">9</font><font color="#9932cd"><b>,</b></font><font color="#802000">10</font><font color="#9932cd"><b>,</b></font><font color="#802000">11</font><font color="#9932cd"><b>,</b></font><font color="#802000">12</font><font color="#9932cd"><b>,</b></font><font color="#802000">13</font><br /><a name="L32">                    <font color="#ff0000">db</font><font color="#802000">14</font><font color="#9932cd"><b>,</b></font><font color="#802000">15</font><font color="#9932cd"><b>,</b></font><font color="#802000">16</font><font color="#9932cd"><b>,</b></font><font color="#802000">17</font><font color="#9932cd"><b>,</b></font><font color="#802000">18</font><font color="#9932cd"><b>,</b></font><font color="#802000">19</font><font color="#9932cd"><b>,</b></font><font color="#802000">20</font><font color="#9932cd"><b>,</b></font><font color="#802000">21</font><font color="#9932cd"><b>,</b></font><font color="#802000">22</font><font color="#9932cd"><b>,</b></font><font color="#802000">23</font><font color="#9932cd"><b>,</b></font><font color="#802000">24</font><font color="#9932cd"><b>,</b></font><font color="#802000">25</font><font color="#9932cd"><b>,</b></font><font color="#802000">255</font><font color="#9932cd"><b>,</b></font><font color="#802000">255</font><font color="#9932cd"><b>,</b></font><font color="#802000">255</font><font color="#9932cd"><b>,</b></font><font color="#802000">255</font><br /><a name="L33">                    <font color="#ff0000">db</font><font color="#802000">255</font><font color="#9932cd"><b>,</b></font><font color="#802000">255</font><font color="#9932cd"><b>,</b></font><font color="#802000">26</font><font color="#9932cd"><b>,</b></font><font color="#802000">27</font><font color="#9932cd"><b>,</b></font><font color="#802000">28</font><font color="#9932cd"><b>,</b></font><font color="#802000">29</font><font color="#9932cd"><b>,</b></font><font color="#802000">30</font><font color="#9932cd"><b>,</b></font><font color="#802000">31</font><font color="#9932cd"><b>,</b></font><font color="#802000">32</font><font color="#9932cd"><b>,</b></font><font color="#802000">33</font><font color="#9932cd"><b>,</b></font><font color="#802000">34</font><font color="#9932cd"><b>,</b></font><font color="#802000">35</font><font color="#9932cd"><b>,</b></font><font color="#802000">36</font><font color="#9932cd"><b>,</b></font><font color="#802000">37</font><font color="#9932cd"><b>,</b></font><font color="#802000">38</font><br /><a name="L34">                    <font color="#ff0000">db</font><font color="#802000">39</font><font color="#9932cd"><b>,</b></font><font color="#802000">40</font><font color="#9932cd"><b>,</b></font><font color="#802000">41</font><font color="#9932cd"><b>,</b></font><font color="#802000">42</font><font color="#9932cd"><b>,</b></font><font color="#802000">43</font><font color="#9932cd"><b>,</b></font><font color="#802000">44</font><font color="#9932cd"><b>,</b></font><font color="#802000">45</font><font color="#9932cd"><b>,</b></font><font color="#802000">46</font><font color="#9932cd"><b>,</b></font><font color="#802000">47</font><font color="#9932cd"><b>,</b></font><font color="#802000">48</font><font color="#9932cd"><b>,</b></font><font color="#802000">49</font><font color="#9932cd"><b>,</b></font><font color="#802000">50</font><font color="#9932cd"><b>,</b></font><font color="#802000">51</font><br /><a name="L35">                    <font color="#ff0000">db</font><font color="#802000">132</font><font color="#ff0000">dup</font><font color="#ff00ff">(</font><font color="#802000">255</font><font color="#ff00ff">)</font><br /><a name="L36"><br /><a name="L37"><font color="#9932cd"><b>.</b></font><font color="#ff0000">code</font><br /><a name="L38">DllEntry    <font color="#ff0000">proc</font>    hInst<font color="#3080ca">:</font> HINSTANCE<font color="#9932cd"><b>,</b></font> reason<font color="#3080ca">:</font><font color="#ff0000">DWORD</font><font color="#9932cd"><b>,</b></font> reserved1<font color="#3080ca">:</font><font color="#ff0000">DWORD</font><br /><a name="L39">    <font color="#ff0000">mov</font><font color="#ff0000">eax</font><font color="#9932cd"><b>,</b></font> TRUE<br /><a name="L40">    <font color="#ff0000">ret</font><br /><a name="L41">DllEntry    <font color="#ff0000">endp</font><br /><a name="L42"><br /><a name="L43"><br /><a name="L44"><font color="#238e23">;**********************************************************</font><br /><a name="L45"><font color="#238e23">;函数功能：进行Base64编码</font><br /><a name="L46"><font color="#238e23">;参数：</font><br /><a name="L47"><font color="#238e23">;    source          =    传入的字符串</font><br /><a name="L48"><font color="#238e23">;    destination     =    返回的编码</font><br /><a name="L49"><font color="#238e23">;**********************************************************</font><br /><a name="L50">Base64Encode    <font color="#ff0000">proc</font>    <font color="#ff0000">uses</font><font color="#ff0000">ebx</font><font color="#ff0000">edi</font><font color="#ff0000">esi</font> source<font color="#3080ca">:</font><font color="#ff0000">DWORD</font><font color="#9932cd"><b>,</b></font> destination<font color="#3080ca">:</font><font color="#ff0000">DWORD</font><br /><a name="L51">    <font color="#ff0000">LOCAL</font>    sourcelen<font color="#3080ca">:</font><font color="#ff0000">DWORD</font><br /><a name="L52"><br /><a name="L53">    <font color="#ff0000">invoke</font> lstrlen<font color="#9932cd"><b>,</b></font> source<br /><a name="L54">    <font color="#ff0000">mov</font> sourcelen<font color="#9932cd"><b>,</b></font><font color="#ff0000">eax</font><br /><a name="L55"><br /><a name="L56">    <font color="#ff0000">mov</font>  <font color="#ff0000">esi</font><font color="#9932cd"><b>,</b></font> source<br /><a name="L57">    <font color="#ff0000">mov</font>  <font color="#ff0000">edi</font><font color="#9932cd"><b>,</b></font> destination<br /><a name="L58">@@base64loop<font color="#3080ca">:</font><br /><a name="L59">    <font color="#ff0000">xor</font><font color="#ff0000">eax</font><font color="#9932cd"><b>,</b></font><font color="#ff0000">eax</font><br /><a name="L60">    <font color="#9932cd"><b>.</b></font><font color="#ff0000">if</font> sourcelen <font color="#3080ca">=</font><font color="#3080ca">=</font><font color="#802000">1</font><br /><a name="L61">        <font color="#ff0000">lodsb</font>                        <font color="#238e23">;source ptr + 1</font><br /><a name="L62">        <font color="#ff0000">mov</font><font color="#ff0000">ecx</font><font color="#9932cd"><b>,</b></font><font color="#802000">2</font>                   <font color="#238e23">;bytes to output = 2</font><br /><a name="L63">        <font color="#ff0000">mov</font><font color="#ff0000">edx</font><font color="#9932cd"><b>,</b></font><font color="#802000">03D3Dh</font>              <font color="#238e23">;padding = 2 byte</font><br /><a name="L64">        <font color="#ff0000">dec</font> sourcelen                <font color="#238e23">;length - 1</font><br /><a name="L65">    <font color="#9932cd"><b>.</b></font><font color="#ff0000">elseif</font> sourcelen <font color="#3080ca">=</font><font color="#3080ca">=</font><font color="#802000">2</font><br /><a name="L66">        <font color="#ff0000">lodsw</font>                        <font color="#238e23">;source ptr + 2</font><br /><a name="L67">        <font color="#ff0000">mov</font><font color="#ff0000">ecx</font><font color="#9932cd"><b>,</b></font><font color="#802000">3</font>                   <font color="#238e23">;bytes to output = 3</font><br /><a name="L68">        <font color="#ff0000">mov</font><font color="#ff0000">edx</font><font color="#9932cd"><b>,</b></font><font color="#802000">03Dh</font>                <font color="#238e23">;padding = 1 byte</font><br /><a name="L69">        <font color="#ff0000">sub</font> sourcelen<font color="#9932cd"><b>,</b></font><font color="#802000">2</font>             <font color="#238e23">;length - 2</font><br /><a name="L70">    <font color="#9932cd"><b>.</b></font><font color="#ff0000">else</font><br /><a name="L71">        <font color="#ff0000">lodsd</font><br /><a name="L72">        <font color="#ff0000">mov</font><font color="#ff0000">ecx</font><font color="#9932cd"><b>,</b></font><font color="#802000">4</font>                   <font color="#238e23">;bytes to output = 4</font><br /><a name="L73">        <font color="#ff0000">xor</font><font color="#ff0000">edx</font><font color="#9932cd"><b>,</b></font><font color="#ff0000">edx</font>                 <font color="#238e23">;padding = 0 byte</font><br /><a name="L74">        <font color="#ff0000">dec</font><font color="#ff0000">esi</font>                      <font color="#238e23">;source ptr + 3 (+4-1)</font><br /><a name="L75">        <font color="#ff0000">sub</font> sourcelen<font color="#9932cd"><b>,</b></font><font color="#802000">3</font>             <font color="#238e23">;length - 3 </font><br /><a name="L76">    <font color="#9932cd"><b>.</b></font><font color="#ff0000">endif</font><br /><a name="L77"><br /><a name="L78">    <font color="#ff0000">xchg</font><font color="#ff0000">al</font><font color="#9932cd"><b>,</b></font><font color="#ff0000">ah</font>                       <font color="#238e23">;flip eax completely</font><br /><a name="L79">    <font color="#ff0000">rol</font>  <font color="#ff0000">eax</font><font color="#9932cd"><b>,</b></font><font color="#802000">16</font>                     <font color="#238e23">;can this be done faster</font><br /><a name="L80">    <font color="#ff0000">xchg</font><font color="#ff0000">al</font><font color="#9932cd"><b>,</b></font><font color="#ff0000">ah</font><br /><a name="L81"><br /><a name="L82">    @@<font color="#3080ca">:</font><br /><a name="L83">    <font color="#ff0000">push</font>  <font color="#ff0000">eax</font><br /><a name="L84">    <font color="#ff0000">and</font>   <font color="#ff0000">eax</font><font color="#9932cd"><b>,</b></font><font color="#802000">0FC000000h</font>            <font color="#238e23">;get the last 6 high bits</font><br /><a name="L85">    <font color="#ff0000">rol</font>   <font color="#ff0000">eax</font><font color="#9932cd"><b>,</b></font><font color="#802000">6</font>                     <font color="#238e23">;rotate them into al</font><br /><a name="L86">    <font color="#ff0000">mov</font>   <font color="#ff0000">al</font><font color="#9932cd"><b>,</b></font>  <font color="#ff0000">byte</font><font color="#ff0000">ptr</font><font color="#871f78">[</font><font color="#ff0000">offset</font> base64_alphabet <font color="#3080ca">+</font><font color="#ff0000">eax</font><font color="#871f78">]</font>        <font color="#238e23">;get encode character</font><br /><a name="L87">    <font color="#ff0000">stosb</font>                            <font color="#238e23">;write to destination</font><br /><a name="L88">    <font color="#ff0000">pop</font>   <font color="#ff0000">eax</font><br /><a name="L89">    <font color="#ff0000">shl</font>   <font color="#ff0000">eax</font><font color="#9932cd"><b>,</b></font><font color="#802000">6</font>                     <font color="#238e23">;shift left 6 bits</font><br /><a name="L90">    <font color="#ff0000">dec</font>   <font color="#ff0000">ecx</font><br /><a name="L91">    <font color="#ff0000">jnz</font>   @B                         <font color="#238e23">;loop</font><br /><a name="L92"><br /><a name="L93">    <font color="#ff0000">cmp</font>   sourcelen<font color="#9932cd"><b>,</b></font><font color="#802000">0</font><br /><a name="L94">    <font color="#ff0000">jnz</font>   @@base64loop               <font color="#238e23">;main loop</font><br /><a name="L95"><br /><a name="L96">    <font color="#ff0000">mov</font>   <font color="#ff0000">eax</font><font color="#9932cd"><b>,</b></font><font color="#ff0000">edx</font>                   <font color="#238e23">;add padding and null terminate</font><br /><a name="L97">    <font color="#ff0000">stosd</font><br /><a name="L98"><br /><a name="L99">    <font color="#ff0000">ret</font><br /><a name="L100">Base64Encode    <font color="#ff0000">endp</font><br /><a name="L101"><br /><a name="L102"><br /><a name="L103"><font color="#238e23">;**********************************************************</font><br /><a name="L104"><font color="#238e23">;函数功能：进行Base64解码</font><br /><a name="L105"><font color="#238e23">;参数：</font><br /><a name="L106"><font color="#238e23">;    source          =    传入的编码</font><br /><a name="L107"><font color="#238e23">;    destination     =    返回的字符串</font><br /><a name="L108"><font color="#238e23">;**********************************************************</font><br /><a name="L109">Base64Decode    <font color="#ff0000">proc</font>    <font color="#ff0000">uses</font><font color="#ff0000">ebx</font><font color="#ff0000">edi</font><font color="#ff0000">esi</font> source<font color="#3080ca">:</font><font color="#ff0000">DWORD</font><font color="#9932cd"><b>,</b></font> destination<font color="#3080ca">:</font><font color="#ff0000">DWORD</font><br /><a name="L110">    <font color="#ff0000">LOCAL</font>    sourcelen<font color="#3080ca">:</font><font color="#ff0000">DWORD</font><br /><a name="L111"><br /><a name="L112">    <font color="#ff0000">invoke</font> lstrlen<font color="#9932cd"><b>,</b></font> source<br /><a name="L113">    <font color="#ff0000">mov</font> sourcelen<font color="#9932cd"><b>,</b></font><font color="#ff0000">eax</font><br /><a name="L114">    <br /><a name="L115">    <font color="#ff0000">mov</font>    <font color="#ff0000">esi</font><font color="#9932cd"><b>,</b></font> source             <font color="#238e23">;esi &lt;- source</font><br /><a name="L116">    <font color="#ff0000">mov</font>    <font color="#ff0000">edi</font><font color="#9932cd"><b>,</b></font> destination        <font color="#238e23">;edi &lt;- destination</font><br /><a name="L117">    <font color="#ff0000">mov</font>    <font color="#ff0000">ecx</font><font color="#9932cd"><b>,</b></font> sourcelen<br /><a name="L118">    <font color="#ff0000">shr</font>    <font color="#ff0000">ecx</font><font color="#9932cd"><b>,</b></font><font color="#802000">2</font><br /><a name="L119">    <font color="#ff0000">cld</font><br /><a name="L120">    <br /><a name="L121">    <font color="#238e23">;-------------[decoding part]---------------</font><br /><a name="L122">    <br /><a name="L123">@@outer_loop<font color="#3080ca">:</font><br /><a name="L124">    <font color="#ff0000">push</font>   <font color="#ff0000">ecx</font><br /><a name="L125">    <font color="#ff0000">mov</font>    <font color="#ff0000">ecx</font><font color="#9932cd"><b>,</b></font><font color="#802000">4</font><br /><a name="L126">    <font color="#ff0000">xor</font>    <font color="#ff0000">ebx</font><font color="#9932cd"><b>,</b></font><font color="#ff0000">ebx</font><br /><a name="L127">    <font color="#ff0000">lodsd</font><br /><a name="L128">@@inner_loop<font color="#3080ca">:</font><br /><a name="L129">    <font color="#ff0000">push</font>   <font color="#ff0000">eax</font><br /><a name="L130">    <font color="#ff0000">and</font>    <font color="#ff0000">eax</font><font color="#9932cd"><b>,</b></font><font color="#802000">0ffh</font><br /><a name="L131">    <font color="#ff0000">mov</font>    <font color="#ff0000">al</font><font color="#9932cd"><b>,</b></font><font color="#ff0000">byte</font><font color="#ff0000">ptr</font><font color="#871f78">[</font><font color="#ff0000">offset</font> base64table <font color="#3080ca">+</font><font color="#ff0000">eax</font><font color="#871f78">]</font><br /><a name="L132">    <font color="#ff0000">cmp</font>    <font color="#ff0000">al</font><font color="#9932cd"><b>,</b></font><font color="#802000">255</font><br /><a name="L133">    <font color="#ff0000">je</font>     @@invalid_char<br /><a name="L134">    <font color="#ff0000">shl</font>    <font color="#ff0000">ebx</font><font color="#9932cd"><b>,</b></font><font color="#802000">6</font><br /><a name="L135">    <font color="#ff0000">or</font>     <font color="#ff0000">bl</font><font color="#9932cd"><b>,</b></font><font color="#ff0000">al</font><br /><a name="L136">    <font color="#ff0000">pop</font>    <font color="#ff0000">eax</font><br /><a name="L137">    <font color="#ff0000">shr</font>    <font color="#ff0000">eax</font><font color="#9932cd"><b>,</b></font><font color="#802000">8</font><br /><a name="L138">    <font color="#ff0000">dec</font>    <font color="#ff0000">ecx</font><br /><a name="L139">    <font color="#ff0000">jnz</font>    @@inner_loop<br /><a name="L140">    <font color="#ff0000">mov</font>    <font color="#ff0000">eax</font><font color="#9932cd"><b>,</b></font><font color="#ff0000">ebx</font><br /><a name="L141">    <font color="#ff0000">shl</font>    <font color="#ff0000">eax</font><font color="#9932cd"><b>,</b></font><font color="#802000">8</font><br /><a name="L142">    <font color="#ff0000">xchg</font>   <font color="#ff0000">ah</font><font color="#9932cd"><b>,</b></font><font color="#ff0000">al</font><br /><a name="L143">    <font color="#ff0000">ror</font>    <font color="#ff0000">eax</font><font color="#9932cd"><b>,</b></font><font color="#802000">16</font><br /><a name="L144">    <font color="#ff0000">xchg</font>   <font color="#ff0000">ah</font><font color="#9932cd"><b>,</b></font><font color="#ff0000">al</font><br /><a name="L145">    <font color="#ff0000">stosd</font><br /><a name="L146">    <font color="#ff0000">dec</font>    <font color="#ff0000">edi</font><br /><a name="L147">    <font color="#ff0000">pop</font>    <font color="#ff0000">ecx</font><br /><a name="L148">    <font color="#ff0000">dec</font>    <font color="#ff0000">ecx</font><br /><a name="L149">    <font color="#ff0000">jnz</font>    @@outer_loop<br /><a name="L150">    <font color="#ff0000">xor</font>    <font color="#ff0000">eax</font><font color="#9932cd"><b>,</b></font><font color="#ff0000">eax</font><br /><a name="L151">    <font color="#ff0000">jmp</font>    @@decode_done<br /><a name="L152">    <br /><a name="L153">    <font color="#238e23">;-------------------------------------------</font><br /><a name="L154">    <br /><a name="L155">@@invalid_char<font color="#3080ca">:</font><br /><a name="L156">    <font color="#ff0000">mov</font>    <font color="#ff0000">eax</font><font color="#9932cd"><b>,</b></font><font color="#3080ca">-</font><font color="#802000">1</font><br /><a name="L157">@@decode_done<font color="#3080ca">:</font><br /><a name="L158">    <font color="#ff0000">ret</font><br /><a name="L159">Base64Decode <font color="#ff0000">ENDP</font><br /><a name="L160"><br /><a name="L161"><br /><a name="L162"><font color="#ff0000">end</font> DllEntry<br /><a name="L163"><font color="#238e23">;********************    over    ********************</font><br /><a name="L164"><font color="#238e23">;by LC</font></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></td></tr></tbody></table><br /><br /><hr /><br /><br /><b>测试程序：base64.asm</b><br /><br /><table border="0" cellspacing="0" cellpadding="0" bgcolor="#fbedbb"><tbody><tr><td><a name="L1"><font color="#238e23">;***********************************************</font><br /><a name="L2"><font color="#238e23">;程序名称：演示Base64编码/解码原理</font><br /><a name="L3"><font color="#238e23">;作者：罗聪</font><br /><a name="L4"><font color="#238e23">;日期：2002-9-14</font><br /><a name="L5"><font color="#238e23">;出处：http://laoluoc.yeah.net（老罗的缤纷天地）</font><br /><a name="L6"><font color="#238e23">;注意事项：如欲转载，请保持本程序的完整，并注明：</font><br /><a name="L7"><font color="#238e23">;转载自“老罗的缤纷天地”（http://laoluoc.yeah.net）</font><br /><a name="L8"><font color="#238e23">;***********************************************</font><br /><a name="L9"><br /><a name="L10"><font color="#9932cd"><b>.</b></font><font color="#802000">386</font><br /><a name="L11"><font color="#9932cd"><b>.</b></font><font color="#ff0000">model</font><font color="#ff0000">flat</font><font color="#9932cd"><b>,</b></font><font color="#ff0000">stdcall</font><br /><a name="L12"><font color="#ff0000">option</font><font color="#ff0000">casemap</font><font color="#3080ca">:</font>none<br /><a name="L13"><br /><a name="L14"><font color="#ff8000">include</font> \masm32\include\windows.inc<br /><a name="L15"><font color="#ff8000">include</font> \masm32\include\kernel32.inc<br /><a name="L16"><font color="#ff8000">include</font> \masm32\include\user32.inc<br /><a name="L17"><font color="#ff8000">include</font> Base64Dll.inc<br /><a name="L18"><font color="#ff8000">includelib</font> \masm32\lib\kernel32.lib<br /><a name="L19"><font color="#ff8000">includelib</font> \masm32\lib\user32.lib<br /><a name="L20"><font color="#ff8000">includelib</font> Base64Dll.lib<br /><a name="L21"><br /><a name="L22">WndProc            <font color="#ff0000">proto</font><font color="#3080ca">:</font><font color="#ff0000">DWORD</font><font color="#9932cd"><b>,</b></font><font color="#3080ca">:</font><font color="#ff0000">DWORD</font><font color="#9932cd"><b>,</b></font><font color="#3080ca">:</font><font color="#ff0000">DWORD</font><font color="#9932cd"><b>,</b></font><font color="#3080ca">:</font><font color="#ff0000">DWORD</font><br /><a name="L23"><br /><a name="L24"><font color="#9932cd"><b>.</b></font><font color="#ff0000">const</font><br /><a name="L25">IDC_BUTTON_ENCODE    <font color="#ff0000">equ</font>    <font color="#802000">3000</font><br /><a name="L26">IDC_BUTTON_DECODE    <font color="#ff0000">equ</font>    <font color="#802000">3001</font><br /><a name="L27">IDC_EDIT_INPUT       <font color="#ff0000">equ</font>    <font color="#802000">3002</font><br /><a name="L28">MAXSIZE              <font color="#ff0000">equ</font>    <font color="#802000">260</font><br /><a name="L29"><br /><a name="L30"><font color="#9932cd"><b>.</b></font><font color="#ff0000">data</font><br /><a name="L31">szDlgName            <font color="#ff0000">db</font>    <font color="#0000ff">"lc_dialog"</font><font color="#9932cd"><b>,</b></font><font color="#802000">0</font><br /><a name="L32">szCaption            <font color="#ff0000">db</font>    <font color="#0000ff">"BASE64 demo by LC"</font><font color="#9932cd"><b>,</b></font><font color="#802000">0</font><br /><a name="L33">szBuffer             <font color="#ff0000">db</font>    <font color="#802000">255</font><font color="#ff0000">dup</font><font color="#ff00ff">(</font><font color="#802000">0</font><font color="#ff00ff">)</font><br /><a name="L34">szText               <font color="#ff0000">db</font>    <font color="#802000">340</font><font color="#ff0000">dup</font><font color="#ff00ff">(</font><font color="#802000">0</font><font color="#ff00ff">)</font><br /><a name="L35">szMsg                <font color="#ff0000">db</font>    <font color="#802000">450</font><font color="#ff0000">dup</font><font color="#ff00ff">(</font><font color="#802000">0</font><font color="#ff00ff">)</font><br /><a name="L36">szTemplate_Encode    <font color="#ff0000">db</font>    <font color="#0000ff">"字符串 ""%s"" 的Base64编码是："</font><font color="#9932cd"><b>,</b></font><font color="#802000">13</font><font color="#9932cd"><b>,</b></font><font color="#802000">10</font><font color="#9932cd"><b>,</b></font><font color="#802000">13</font><font color="#9932cd"><b>,</b></font><font color="#802000">10</font><font color="#9932cd"><b>,</b></font><font color="#0000ff">"%s"</font><font color="#9932cd"><b>,</b></font><font color="#802000">0</font><br /><a name="L37">szTemplate_Decode    <font color="#ff0000">db</font>    <font color="#0000ff">"编码 ""%s"" 经过Base64还原后的字符串是："</font><font color="#9932cd"><b>,</b></font><font color="#802000">13</font><font color="#9932cd"><b>,</b></font><font color="#802000">10</font><font color="#9932cd"><b>,</b></font><font color="#802000">13</font><font color="#9932cd"><b>,</b></font><font color="#802000">10</font><font color="#9932cd"><b>,</b></font><font color="#0000ff">"%s"</font><font color="#9932cd"><b>,</b></font><font color="#802000">0</font><br /><a name="L38"><br /><a name="L39"><font color="#9932cd"><b>.</b></font><font color="#ff0000">code</font><br /><a name="L40">main<font color="#3080ca">:</font><br /><a name="L41">    <font color="#ff0000">invoke</font> GetModuleHandle<font color="#9932cd"><b>,</b></font> NULL<br /><a name="L42">    <font color="#ff0000">invoke</font> DialogBoxParam<font color="#9932cd"><b>,</b></font><font color="#ff0000">eax</font><font color="#9932cd"><b>,</b></font><font color="#ff0000">offset</font> szDlgName<font color="#9932cd"><b>,</b></font><font color="#802000">0</font><font color="#9932cd"><b>,</b></font> WndProc<font color="#9932cd"><b>,</b></font><font color="#802000">0</font><br /><a name="L43">    <font color="#ff0000">invoke</font> ExitProcess<font color="#9932cd"><b>,</b></font><font color="#ff0000">eax</font><br /><a name="L44"><br /><a name="L45">WndProc <font color="#ff0000">proc</font><font color="#ff0000">uses</font><font color="#ff0000">edi</font> hWnd<font color="#3080ca">:</font>HWND<font color="#9932cd"><b>,</b></font> uMsg<font color="#3080ca">:</font>UINT<font color="#9932cd"><b>,</b></font> wParam<font color="#3080ca">:</font>WPARAM<font color="#9932cd"><b>,</b></font> lParam<font color="#3080ca">:</font>LPARAM<br /><a name="L46">    <font color="#ff0000">LOCAL</font> hEdit<font color="#3080ca">:</font> HWND<br /><a name="L47"><br /><a name="L48">    <font color="#9932cd"><b>.</b></font><font color="#ff0000">if</font> uMsg <font color="#3080ca">=</font><font color="#3080ca">=</font> WM_CLOSE<br /><a name="L49">        <font color="#ff0000">invoke</font> EndDialog<font color="#9932cd"><b>,</b></font> hWnd<font color="#9932cd"><b>,</b></font><font color="#802000">0</font><br /><a name="L50">        <br /><a name="L51">    <font color="#9932cd"><b>.</b></font><font color="#ff0000">elseif</font> uMsg <font color="#3080ca">=</font><font color="#3080ca">=</font> WM_COMMAND<br /><a name="L52">        <font color="#ff0000">mov</font><font color="#ff0000">eax</font><font color="#9932cd"><b>,</b></font> wParam<br /><a name="L53">        <font color="#ff0000">mov</font><font color="#ff0000">edx</font><font color="#9932cd"><b>,</b></font><font color="#ff0000">eax</font><br /><a name="L54">        <font color="#ff0000">shr</font><font color="#ff0000">edx</font><font color="#9932cd"><b>,</b></font><font color="#802000">16</font><br /><a name="L55">        <font color="#ff0000">movzx</font><font color="#ff0000">eax</font><font color="#9932cd"><b>,</b></font><font color="#ff0000">ax</font><br /><a name="L56">        <font color="#9932cd"><b>.</b></font><font color="#ff0000">if</font><font color="#ff0000">edx</font><font color="#3080ca">=</font><font color="#3080ca">=</font> BN_CLICKED<br /><a name="L57">            <font color="#9932cd"><b>.</b></font><font color="#ff0000">if</font><font color="#ff0000">eax</font><font color="#3080ca">=</font><font color="#3080ca">=</font> IDCANCEL<br /><a name="L58">                <font color="#ff0000">invoke</font> EndDialog<font color="#9932cd"><b>,</b></font> hWnd<font color="#9932cd"><b>,</b></font> NULL<br /><a name="L59">    <br /><a name="L60">            <font color="#9932cd"><b>.</b></font><font color="#ff0000">elseif</font><font color="#ff0000">eax</font><font color="#3080ca">=</font><font color="#3080ca">=</font> IDC_BUTTON_ENCODE <font color="#3080ca">|</font><font color="#3080ca">|</font><font color="#ff0000">eax</font><font color="#3080ca">=</font><font color="#3080ca">=</font> IDOK<br /><a name="L61">                <font color="#238e23">;取得用户输入的字符串：</font><br /><a name="L62">                <font color="#ff0000">invoke</font> GetDlgItemText<font color="#9932cd"><b>,</b></font> hWnd<font color="#9932cd"><b>,</b></font> IDC_EDIT_INPUT<font color="#9932cd"><b>,</b></font><font color="#ff0000">addr</font> szBuffer<font color="#9932cd"><b>,</b></font><font color="#802000">255</font><br /><a name="L63"><br /><a name="L64">                <font color="#238e23">;进行 ASCII-&gt;Base64 转换：</font><br /><a name="L65">                <font color="#ff0000">invoke</font> Base64Encode<font color="#9932cd"><b>,</b></font><font color="#ff0000">addr</font> szBuffer<font color="#9932cd"><b>,</b></font><font color="#ff0000">addr</font> szText<br /><a name="L66"><br /><a name="L67">                <font color="#238e23">;格式化输出：</font><br /><a name="L68">                <font color="#ff0000">invoke</font> wsprintf<font color="#9932cd"><b>,</b></font><font color="#ff0000">addr</font> szMsg<font color="#9932cd"><b>,</b></font><font color="#ff0000">addr</font> szTemplate_Encode<font color="#9932cd"><b>,</b></font><font color="#ff0000">addr</font> szBuffer<font color="#9932cd"><b>,</b></font><font color="#ff0000">addr</font> szText<br /><a name="L69"><br /><a name="L70">                <font color="#238e23">;显示结果：</font><br /><a name="L71">                <font color="#ff0000">invoke</font> MessageBox<font color="#9932cd"><b>,</b></font> hWnd<font color="#9932cd"><b>,</b></font><font color="#ff0000">addr</font> szMsg<font color="#9932cd"><b>,</b></font><font color="#ff0000">addr</font> szCaption<font color="#9932cd"><b>,</b></font> MB_OK<br /><a name="L72"><br /><a name="L73">            <font color="#9932cd"><b>.</b></font><font color="#ff0000">elseif</font><font color="#ff0000">eax</font><font color="#3080ca">=</font><font color="#3080ca">=</font> IDC_BUTTON_DECODE<br /><a name="L74">                <font color="#238e23">;取得用户输入的字符串：</font><br /><a name="L75">                <font color="#ff0000">invoke</font> GetDlgItemText<font color="#9932cd"><b>,</b></font> hWnd<font color="#9932cd"><b>,</b></font> IDC_EDIT_INPUT<font color="#9932cd"><b>,</b></font><font color="#ff0000">addr</font> szBuffer<font color="#9932cd"><b>,</b></font><font color="#802000">255</font><br /><a name="L76"><br /><a name="L77">                <font color="#238e23">;进行 Base64-&gt;ASCII 转换：</font><br /><a name="L78">                <font color="#ff0000">invoke</font> Base64Decode<font color="#9932cd"><b>,</b></font><font color="#ff0000">addr</font> szBuffer<font color="#9932cd"><b>,</b></font><font color="#ff0000">addr</font> szText<br /><a name="L79"><br /><a name="L80">                <font color="#238e23">;格式化输出：</font><br /><a name="L81">                <font color="#ff0000">invoke</font> wsprintf<font color="#9932cd"><b>,</b></font><font color="#ff0000">addr</font> szMsg<font color="#9932cd"><b>,</b></font><font color="#ff0000">addr</font> szTemplate_Decode<font color="#9932cd"><b>,</b></font><font color="#ff0000">addr</font> szBuffer<font color="#9932cd"><b>,</b></font><font color="#ff0000">addr</font> szText<br /><a name="L82"><br /><a name="L83">                <font color="#238e23">;显示结果：</font><br /><a name="L84">                <font color="#ff0000">invoke</font> MessageBox<font color="#9932cd"><b>,</b></font> hWnd<font color="#9932cd"><b>,</b></font><font color="#ff0000">addr</font> szMsg<font color="#9932cd"><b>,</b></font><font color="#ff0000">addr</font> szCaption<font color="#9932cd"><b>,</b></font> MB_OK<br /><a name="L85">            <font color="#9932cd"><b>.</b></font><font color="#ff0000">endif</font><br /><a name="L86"><br /><a name="L87">            <font color="#238e23">;全选edit里面的内容：</font><br /><a name="L88">            <font color="#ff0000">invoke</font> GetDlgItem<font color="#9932cd"><b>,</b></font> hWnd<font color="#9932cd"><b>,</b></font> IDC_EDIT_INPUT<br /><a name="L89">            <font color="#ff0000">invoke</font> SendMessage<font color="#9932cd"><b>,</b></font><font color="#ff0000">eax</font><font color="#9932cd"><b>,</b></font> EM_SETSEL<font color="#9932cd"><b>,</b></font><font color="#802000">0</font><font color="#9932cd"><b>,</b></font><font color="#3080ca">-</font><font color="#802000">1</font><br /><a name="L90"><br /><a name="L91">        <font color="#9932cd"><b>.</b></font><font color="#ff0000">endif</font><br /><a name="L92">    <font color="#9932cd"><b>.</b></font><font color="#ff0000">else</font><br /><a name="L93">        <font color="#ff0000">mov</font><font color="#ff0000">eax</font><font color="#9932cd"><b>,</b></font> FALSE<br /><a name="L94">        <font color="#ff0000">ret</font><br /><a name="L95">    <font color="#9932cd"><b>.</b></font><font color="#ff0000">endif</font><br /><a name="L96">    <font color="#ff0000">mov</font><font color="#ff0000">eax</font><font color="#9932cd"><b>,</b></font> TRUE<br /><a name="L97">    <font color="#ff0000">ret</font><br /><a name="L98">WndProc <font color="#ff0000">endp</font><br /><a name="L99"><br /><a name="L100"><font color="#ff0000">end</font> main<br /><a name="L101"><font color="#238e23">;********************    over    ********************</font><br /><a name="L102"><font color="#238e23">;by LC</font></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></a></td></tr></tbody></table><br /><br /><hr /><br /><br /><b>测试程序的资源文件：base64.rc</b><br /><br /><table border="0" cellspacing="0" cellpadding="0" bgcolor="#fbedbb"><tbody><tr><td>#include "resource.h"<br /><br />#define IDC_BUTTON_ENCODE    3000<br />#define IDC_BUTTON_DECODE    3001<br />#define IDC_EDIT_INPUT       3002<br />#define IDC_STATIC           -1<br /><br />LC_DIALOG DIALOGEX 10, 10, 195, 60<br />STYLE DS_SETFONT | DS_CENTER | WS_MINIMIZEBOX | WS_VISIBLE | WS_CAPTION | <br />    WS_SYSMENU<br />CAPTION "Base64 demo by LC"<br />FONT 9, "宋体", 0, 0, 0x0<br />BEGIN<br />    LTEXT           "请输入字符串：", IDC_STATIC, 11, 7, 130, 10<br />    EDITTEXT        IDC_EDIT_INPUT, 11, 20, 173, 12, ES_AUTOHSCROLL<br />    DEFPUSHBUTTON   "编码(&amp;E)", IDC_BUTTON_ENCODE, 38, 39, 52, 15<br />    PUSHBUTTON      "解码(&amp;D)", IDC_BUTTON_DECODE, 104, 39, 52, 15<br />END</td></tr></tbody></table><br /><br /><b>如果你发现了有bug，一定要告诉我啊，并请来信讨论！<a title="来信讨论！" href="mailto:lcother@163.net?subject=老罗，有关Base64的问题想跟你讨论！">mailto:lcother@163.net?subject=老罗，有关Base64的问题想跟你讨论！</a></b><br /><br />最后给大家留下一个小小的习题，你知道下面这串Base64编码的原文是什么吗？  ：）<br /><font color="#0099ff">0LvQu8T6xM3XxdDU19O/tM3qztK1xEJhc2U2NL3Ms8yjoSCjuqOp</font><p></p><p align="right">老罗<br />2002-9-14 </p><!-- Page published by Emacs Wiki ends here --><img src ="http://www.blogjava.net/jasmine214--love/aggbug/323626.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jasmine214--love/" target="_blank">幻海蓝梦</a> 2010-06-15 17:16 <a href="http://www.blogjava.net/jasmine214--love/archive/2010/06/15/323626.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>