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编解码
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Байду номын сангаас

javaBase64编码、解码

javaBase64编码、解码

javaBase64编码、解码⽬录并⾮所有数据都可以⽤String类型来显⽰(例如字节流数据),但是都可以转为byte数组后进⾏base64编码再转String来显⽰,使⽤的时候再解码成原数据即可。

jdk8提供了Base64的⽀持、使⽤⾮常简单。

只需区分开encode与decode即可。

encode:编码,可以将任意数据进⾏base64编码//byte数组进⾏编码byte[] bytes = new byte[1024];byte[] encode = Base64.getEncoder().encode(bytes);decode:解码,⽤户将进⾏了base64编码的数据还原//编码结果进⾏Base64解码,解码得到的byte数组即为编码源数组byte[] encode = Base64.getDecoder().decode(encode);所有对象类型⽀持Base64编码解码。

java所有对象都是继承了Object的,请看以下代码。

可以确定java的所有对象类型皆可采⽤base64编码后传输,解码获取。

//Base64解码为String类型String str1 = new String(Base64.getDecoder().decode(encode2));System.out.println("原⽂原⽂⽂"+msg1);System.out.println("编码解码后"+str1);//获取 Long 类型Base64编码Object oldObject = new Long("12354687");ByteArrayOutputStream outputStream = new ByteArrayOutputStream();ObjectOutputStream objectOutputStream = new ObjectOutputStream(outputStream);objectOutputStream.writeObject(oldObject);//原对象字节数组byte[] bytes = outputStream.toByteArray();//编码后字节数组byte[] encode3 = Base64.getEncoder().encode(bytes);//解码后字节数组byte[] decode1 = Base64.getDecoder().decode(encode3);//此处可以通过循环判定内容是否变更,由于字节数组内容完全相等,所以”不想等“字符串永不打印if(bytes.length==decode1.length){for (int i = 0; i < decode1.length; i++) {if(bytes[i]!=decode1[i]){System.out.println("不相等");}}}ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(decode1);ObjectInputStream objectInputStream = new ObjectInputStream(byteArrayInputStream);Object newObject = objectInputStream.readObject();System.out.println("新旧对象是否相等:"+newObject.equals(oldObject));。

Base64位编码解码

Base64位编码解码

Base64编码说明Base64编码要求把3个8位字节(3*8=24)转化为4个6位的字节(4*6=24),之后在6位的前面补两个0,形成8位一个字节的形式。

如果剩下的字符不足3个字节,则用0填充,输出字符使用'=',因此编码后输出的文本末尾可能会出现1或2个'='。

为了保证所输出的编码位可读字符,Base64制定了一个编码表,以便进行统一转换。

编码表的大小为2^6=64,这也是Base64名称的由来。

Base64编码表码值字符码值字符码值字符码值字符0 A 16 Q 32 g 48 w1 B 17 R 33 h 49 x2 C 18 S 34 i 50 y3 D 19 T 35 j 51 z4 E 20 U 36 k 52 05 F 21 V 37 l 53 16 G 22 W 38 m 54 27 H 23 X 39 n 55 38 I 24 Y 40 o 56 49 J 25 Z 41 p 57 510 K 26 a 42 q 58 611 L 27 b 43 r 59 712 M 28 c 44 s 60 813 N 29 d 45 t 61 914 O 30 e 46 u 62 +15 P 31 f 47 v 63 /原理转码过程例子:3*8=4*6内存1个字符占8位转前: s 1 3先转成ascii:对应 115 49 512进制: 01110011 00110001 001100116个一组(4组)011100110011000100110011然后才有后面的 011100 110011 000100 110011然后计算机是8位8位的存数 6不够,自动就补两个高位0了所有有了高位补0科学计算器输入00011100 00110011 00000100 00110011得到 28 51 4 51查对下照表 c z E z。

javascript中的Base64、UTF8编码与解码详解

javascript中的Base64、UTF8编码与解码详解

javascript中的Base64、UTF8编码与解码详解Base64编码说明 Base64编码要求把3个8位字节(3*8=24)转化为4个6位的字节(4*6=24),之后在6位的前⾯补两个0,形成8位⼀个字节的形式。

如果剩下的字符不⾜3个字节,则⽤0填充,输出字符使⽤'=',因此编码后输出的⽂本末尾可能会出现1或2个'='。

base64编码库:(已验证可⽤)复制代码代码如下:var base64 = (function(){var keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";return {"encode64":encode64,"decode64":decode64}function encode64(input){input = strUnicode2Ansi(input);var output = "";var chr1, chr2, chr3 = "";var enc1, enc2, enc3, enc4 = "";var i = 0;do{chr1 = input.charCodeAt(i++);chr2 = input.charCodeAt(i++);chr3 = input.charCodeAt(i++);enc1 = chr1 >> 2;enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);enc4 = chr3 & 63;if (isNaN(chr2)){enc3 = enc4 = 64;}else if(isNaN(chr3)){enc4 = 64;}output = output +keyStr.charAt(enc1) +keyStr.charAt(enc2) +keyStr.charAt(enc3) +keyStr.charAt(enc4);chr1 = chr2 = chr3 = "";enc1 = enc2 = enc3 = enc4 = "";}while(i < input.length);return output;}function decode64(input){var output = "";var chr1, chr2, chr3 = "";var enc1, enc2, enc3, enc4 = "";var i = 0;if(input.length%4!=0){return "";}var base64test = /[^A-Za-z0-9\+\/\=]/g;if (base64test.exec(input)){return "";}do {enc1 = keyStr.indexOf(input.charAt(i++));enc2 = keyStr.indexOf(input.charAt(i++));enc3 = keyStr.indexOf(input.charAt(i++));enc4 = keyStr.indexOf(input.charAt(i++));chr1 = (enc1 << 2) | (enc2 >> 4);chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);chr3 = ((enc3 & 3) << 6) | enc4;output = output + String.fromCharCode(chr1);if (enc3 != 64) {output+=String.fromCharCode(chr2);}if (enc4 != 64) {output+=String.fromCharCode(chr3);}chr1 = chr2 = chr3 = "";enc1 = enc2 = enc3 = enc4 = "";} while (i < input.length);return strAnsi2Unicode(output);}function UnicodeChr(){return'00A4,00A7,00A8,00B0,00B1,00B7,00D7,00E0,00E1,00E8,00E9,00EA,00EC,00ED,00F2,00F3,00F7,00F9,00FA,00FC,0101,0113,011B,012B,014D,016B,01CE,01D0,01D2,01D4,01D6,01D8,01DA,01DC,02C7,0 }function AnsicodeChr(){return'A1E8,A1EC,A1A7,A1E3,A1C0,A1A4,A1C1,A8A4,A8A2,A8A8,A8A6,A8BA,A8AC,A8AA,A8B0,A8AE,A1C2,A8B4,A8B2,A8B9,A8A1,A8A5,A8A7,A8A9,A8AD,A8B1,A8A3,A8AB,A8AF,A8B3,A8B5,A8B6,A8B7,A8B }function UnicodeToAnsi(chrCode){var chrHex=chrCode.toString(16);chrHex="000"+chrHex.toUpperCase();chrHex=chrHex.substr(chrHex.length-4);var i=UnicodeChr().indexOf(chrHex);if(i!=-1){chrHex=AnsicodeChr().substr(i,4);}return parseInt(chrHex,16)}function AnsiToUnicode(chrCode){var chrHex=chrCode.toString(16);chrHex="000"+chrHex.toUpperCase();chrHex=chrHex.substr(chrHex.length-4);var i=AnsicodeChr().indexOf(chrHex);if(i!=-1){chrHex=UnicodeChr().substr(i,4);}return parseInt(chrHex,16)}function strUnicode2Ansi(asContents){var len1=asContents.length;var temp="";for(var i=0;i<len1;i++){var varasc=asContents.charCodeAt(i);if(varasc<0)varasc+=65536;if(varasc>127)varasc=UnicodeToAnsi(varasc);if(varasc>255){var varlow=varasc & 65280;varlow=varlow>>8;var varhigh=varasc & 255;temp+=String.fromCharCode(varlow)+String.fromCharCode(varhigh);}else{temp+=String.fromCharCode(varasc);}}return temp;}function strAnsi2Unicode(asContents){var len1=asContents.length;var temp="";var chrcode;for(var i=0;i<len1;i++){var varasc=asContents.charCodeAt(i);if(varasc>127){chrcode=AnsiToUnicode((varasc<<8)+asContents.charCodeAt(++i));}else{chrcode=varasc;}temp+=String.fromCharCode(chrcode);}return temp;}}());测试:var str = base64.encode64("这是测试");alert(base64.decode64(str));1.Base64编码与解码:(未验证)复制代码代码如下:var base64EncodeChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";var base64DecodeChars = new Array(-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 62, -1, -1, -1, 63, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, -1, -1, -1, -1, -1, -1, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, -1, -1, -1, -1, -1, -1, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, -1, -1, -1, -1, -1);/*** base64编码* @param {Object} str*/function base64encode(str){var out, i, len;var c1, c2, c3;len = str.length;i = 0;out = "";while (i < len) {c1 = str.charCodeAt(i++) & 0xff;if (i == len) {out += base64EncodeChars.charAt(c1 >> 2);out += base64EncodeChars.charAt((c1 & 0x3) << 4);out += "==";break;}c2 = str.charCodeAt(i++);if (i == len) {out += base64EncodeChars.charAt(c1 >> 2);out += base64EncodeChars.charAt(((c1 & 0x3) << 4) | ((c2 & 0xF0) >> 4)); out += base64EncodeChars.charAt((c2 & 0xF) << 2);out += "=";break;}c3 = str.charCodeAt(i++);out += base64EncodeChars.charAt(c1 >> 2);out += base64EncodeChars.charAt(((c1 & 0x3) << 4) | ((c2 & 0xF0) >> 4)); out += base64EncodeChars.charAt(((c2 & 0xF) << 2) | ((c3 & 0xC0) >> 6)); out += base64EncodeChars.charAt(c3 & 0x3F);}return out;}/*** base64解码* @param {Object} str*/function base64decode(str){var c1, c2, c3, c4;var i, len, out;len = str.length;i = 0;out = "";while (i < len) {/* c1 */do {c1 = base64DecodeChars[str.charCodeAt(i++) & 0xff];}while (i < len && c1 == -1);if (c1 == -1)break;/* c2 */do {c2 = base64DecodeChars[str.charCodeAt(i++) & 0xff];}while (i < len && c2 == -1);if (c2 == -1)break;out += String.fromCharCode((c1 << 2) | ((c2 & 0x30) >> 4));/* c3 */do {c3 = str.charCodeAt(i++) & 0xff;if (c3 == 61)return out;c3 = base64DecodeChars[c3];}while (i < len && c3 == -1);if (c3 == -1)break;out += String.fromCharCode(((c2 & 0XF) << 4) | ((c3 & 0x3C) >> 2));/* c4 */do {c4 = str.charCodeAt(i++) & 0xff;if (c4 == 61)return out;c4 = base64DecodeChars[c4];}while (i < len && c4 == -1);if (c4 == -1)break;out += String.fromCharCode(((c3 & 0x03) << 6) | c4);}return out;}/*** utf16转utf8* @param {Object} str*/function utf16to8(str){var out, i, len, c;out = "";len = str.length;for (i = 0; i < len; i++) {c = str.charCodeAt(i);if ((c >= 0x0001) && (c <= 0x007F)) {out += str.charAt(i);}elseif (c > 0x07FF) {out += String.fromCharCode(0xE0 | ((c >> 12) & 0x0F));out += String.fromCharCode(0x80 | ((c >> 6) & 0x3F));out += String.fromCharCode(0x80 | ((c >> 0) & 0x3F));}else {out += String.fromCharCode(0xC0 | ((c >> 6) & 0x1F));out += String.fromCharCode(0x80 | ((c >> 0) & 0x3F));}}return out;}/*** utf8转utf16* @param {Object} str*/function utf8to16(str){var out, i, len, c;var char2, char3;out = "";len = str.length;i = 0;while (i < len) {c = str.charCodeAt(i++);switch (c >> 4) {case 0:case 1:case 2:case 3:case 4:case 5:case 6:case 7:// 0xxxxxxxout += str.charAt(i - 1);break;case 12:case 13:// 110x xxxx 10xx xxxxchar2 = str.charCodeAt(i++);out += String.fromCharCode(((c & 0x1F) << 6) | (char2 & 0x3F));break;case 14:// 1110 xxxx10xx xxxx10xx xxxxchar2 = str.charCodeAt(i++);char3 = str.charCodeAt(i++);out += String.fromCharCode(((c & 0x0F) << 12) | ((char2 & 0x3F) << 6) | ((char3 & 0x3F) << 0)); break;}}return out;}//demo//function doit(){// var f = document.f;// f.output.value = base64encode(utf16to8(f.source.value));// f.decode.value = utf8to16(base64decode(f.output.value));//}2.UTF8编码与解码:复制代码代码如下:function encodeUTF8(str){var temp = "",rs = "";for( var i=0 , len = str.length; i < len; i++ ){temp = str.charCodeAt(i).toString(16);rs += "\\u"+ new Array(5-temp.length).join("0") + temp;}return rs;}function decodeUTF8(str){return str.replace(/(\\u)(\w{4}|\w{2})/gi, function($0,$1,$2){return String.fromCharCode(parseInt($2,16));});}以上就是本⽂的全部内容了,希望能够对⼤家熟练掌握javascript中的base64编码解码有所帮助。

Base64编码解码(源代码)

Base64编码解码(源代码)

Base64编码解码(源代码)Base64 Content-Transfer-Encoding ( RFC2045 ) 可对任何⽂件进⾏base64 编解码,主要⽤于MIME邮件内容编解码// 11111100 0xFC // 11000000 0x3 // 11110000 0xF0 // 00001111 0xF // 11000000 0xC0 // 00111111 0x3Fbyte *lmMimeEncodeBase64(const byte *octetSource, int size) { byte *m_Base64_Table = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";int base64size = (((((size) + 2) / 3) * 4) + 1) / 76 * 78 + 78; //add "/r/n" for each line'byte *strEncode = (byte *)MALLOC(base64size); byte cTemp[4];//By RFC2045 --The encoded output stream must be represented in lines of no more than 76 characters each int LineLength=0; int i, len, j=0;MEMSET(strEncode, 0, base64size);for(i=0; i<size; i+=3) { MEMSET(cTemp,0,4);//cTemp[0]=octetSource[i]; //cTemp[1]=octetSource[i+1]; //cTemp[2]=octetSource[i+2];//len=strlen((char *)cTemp);if(i<size-3){ len = 3; cTemp[0]=octetSource[i]; cTemp[1]=octetSource[i+1]; cTemp[2]=octetSource[i+2]; } else{ len = 0; if(i<size){ cTemp[0]=octetSource[i]; ++len; } if(i<size-1){cTemp[1]=octetSource[i+1]; ++len; } if(i<size-2){ cTemp[2]=octetSource[i+2]; ++len; } //DBGPRINTF("temp[0] = %d", cTemp[0]); //DBGPRINTF("temp[1] = %d", cTemp[1]); //DBGPRINTF("temp[2] = %d",cTemp[2]); //DBGPRINTF("strEncode[0] = %d", ((int)cTemp[0] & 0xFC)>>2); //DBGPRINTF("strEncode[1] = %d",((int)cTemp[0] & 0x3)<<4 | ((int)cTemp[1] & 0xF0)>>4); //DBGPRINTF("strEncode[2] = %d", ((int)cTemp[1] & 0xF)<<2 | ((int)cTemp[2] & 0xC0)>>6); //DBGPRINTF("strEncode[3] = %d", (int)cTemp[2] & 0x3F); //DBGPRINTF("strEncode[0] = %c",m_Base64_Table[((int)cTemp[0] & 0xFC)>>2]); //DBGPRINTF("strEncode[1] = %c", m_Base64_Table[((int)cTemp[0] & 0x3)<<4 | ((int)cTemp[1] & 0xF0)>>4]); //DBGPRINTF("strEncode[2] = %c", m_Base64_Table[((int)cTemp[1] & 0xF)<<2 | ((int)cTemp[2] &0xC0)>>6]); //DBGPRINTF("strEncode[3] = %c", m_Base64_Table[(int)cTemp[2] & 0x3F]); }if(len==3) { strEncode[j++] = m_Base64_Table[((int)cTemp[0] & 0xFC)>>2]; strEncode[j++] =m_Base64_Table[((int)cTemp[0] & 0x3)<<4 | ((int)cTemp[1] & 0xF0)>>4]; strEncode[j++] = m_Base64_Table[((int)cTemp[1] & 0xF) <<2 | ((int)cTemp[2] & 0xC0)>>6]; strEncode[j++] = m_Base64_Table[(int)cTemp[2] & 0x3F]; LineLength+=4;if(LineLength>=76) {strEncode[j++]='/r'; strEncode[j++]='/n'; LineLength=0;} } else if(len==2) { strEncode[j++] =m_Base64_Table[((int)cTemp[0] & 0xFC)>>2]; strEncode[j++] = m_Base64_Table[((int)cTemp[0] & 0x3 )<<4 | ((int)cTemp[1] & 0xF0 )>>4]; strEncode[j++] = m_Base64_Table[((int)cTemp[1] & 0x0F)<<2]; strEncode[j++] = '='; LineLength+=4;if(LineLength>=76) {strEncode[j++]='/r'; strEncode[j++]='/n'; LineLength=0;} } else if(len==1) { strEncode[j++] =m_Base64_Table[((int)cTemp[0] & 0xFC)>>2]; strEncode[j++] = m_Base64_Table[((int)cTemp[0] & 0x3 )<<4]; strEncode[j++] = '='; strEncode[j++] = '='; LineLength+=4; if(LineLength>=76) {strEncode[j++]='/r'; strEncode[j++]='/n'; LineLength=0;} } memset(cTemp,0,4); } //strEncode[j] = '/0'; //DBGPRINTF("--finished encode base64size = %d, j = %d", base64size, j); //for(i=j; i<base64size; i++){ // DBGPRINTF("--rest char is: %c", strEncode[i]); //} return strEncode; }byte GetBase64Value(char ch) { if ((ch >= 'A') && (ch <= 'Z')) return ch - 'A'; if ((ch >= 'a') && (ch <= 'z')) return ch - 'a' + 26; if ((ch >= '0') && (ch <= '9')) return ch - '0' + 52; switch (ch) { case '+': return 62; case '/': return 63; case '=': /* base64 padding */ return 0; default: return 0; } } byte *lmMimeDecodeBase64(const byte *strSource, int *psize) { byte *m_Base64_Table = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; int i, j, k, size = STRLEN((char *)strSource); int n = 0; //return value byte *octetDecode = (byte *)MALLOC( (((size) - 1) / 4) *3 ); byte cTemp[5]; int Length=0; int asc[4];for(i=0;i<size;i+=4) { MEMSET(cTemp,0,5);cTemp[0]=strSource[i]; cTemp[1]=strSource[i+1]; cTemp[2]=strSource[i+2]; cTemp[3]=strSource[i+3];Length+=4; if(Length==76) { i+=2; Length=0; }for(j=0;j<4;j++) { //if(cTemp[j]=='='){ // asc[j]=0; //}else{ for(k=0;k<(int)STRLEN((char*)m_Base64_Table);k++) { if(cTemp[j]==m_Base64_Table[k]) asc[j]=k; } //} } if('='==cTemp[2] && '='==cTemp[3]) { octetDecode[n++] = (byte)(int)(asc[0] << 2 | asc[1] << 2 >> 6); } else if('='==cTemp[3]) { octetDecode[n++] = (byte)(int)(asc[0] << 2 | asc[1] << 2 >> 6); octetDecode[n++] = (byte)(int)(asc[1] << 4 | asc[2] << 2 >> 4); } else { octetDecode[n++] = (byte)(int)(asc[0] << 2 | asc[1] << 2 >> 6); octetDecode[n++] = (byte)(int)(asc[1] << 4 | asc[2] << 2 >> 4); octetDecode[n++] = (byte)(int)(asc[2] << 6 | asc[3] << 2 >> 2); }//cTemp[0] = GetBase64Value((char)strSource[i]); //cTemp[1] = GetBase64Value((char)strSource[i+1]); //cTemp[2] = GetBase64Value((char)strSource[i+2]); //cTemp[3] = GetBase64Value((char)strSource[i+3]);//Length+=4; //if(Length==76) //{ // i+=2; // Length=0; //}//octetDecode[n++] = (cTemp[0] << 2) | (cTemp[1] >> 4); //octetDecode[n++] = (cTemp[1] << 4) | (cTemp[2] >> 2); //octetDecode[n++] = (cTemp[2] << 6) | (cTemp[3]);} *psize = n; return octetDecode; }。

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

#ifndef _BASE64_INCLUDE__H__#define _BASE64_INCLUDE__H__#include <string.h>//***************************************************************************** ********// 定义Base64编码命名空间://***************************************************************************** ********namespace stringcoding{static const char_B64_[64]={ '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', '+', '/'};//--------------------------------------------------//Encodeing://--------------------------------------------------inline void encodetribyte(unsigned char * in,unsigned char * out,intlen){if(len==0) return;inti;unsigned char inbuf[3];memset(inbuf,0,sizeof(unsigned char)*3);for(i=0;i<len;i++){inbuf[i]=in[i];}out[0]=_B64_[ inbuf[0]>>2 ];out[1]=_B64_[ ((inbuf[0]&0x03)<<4)|((inbuf[1]&0xf0)>>4) ];//if(len>1) means len=={2,3}//else means len==1, out[2]='=';out[2]=(len>1?_B64_[ ((inbuf[1]&0x0f)<<2)|((inbuf[2]&0xc0)>>6) ]:'=');//if(len>2) menaslen==3//else means len=={1,2} out[3]='=';out[3]=(len>2?_B64_[ inbuf[2]&0x3f ]:'=');}//--------------------------------------------------//Decoding://--------------------------------------------------inline intdecodetribyte(unsigned char * in, unsigned char * out){inti,j,len;char dec[4];memset(dec,0,sizeof(char)*4);len=3;//Get effective original text char count:if(in[3]=='=') len--;if(in[2]=='=') len--;//Find code according to input charactors:for(i=0;i<64;i++){for(j=0;j<4;j++){if(in[j]==_B64_[i]) dec[j]=i;}}//Re-compose original text code:out[0]=(dec[0]<<2|dec[1]>>4);if(len==1) return 1;out[1]=(dec[1]<<4|dec[2]>>2);if(len==2) return 2;out[2]=(((dec[2]<<6)&0xc0)|dec[3]);return 3;}//Encode input byte stream, please ensure lenghth of out//buffer big enough to hold all codes.//The b64 code array size is 4*(tri-byte blocks in original text).inline int Base64Encode(unsigned char * b64,const unsigned char * input,ULONGstringlen=0) {if(!b64||!input||stringlen<0) return 0;ULONG slen,imax;register unsigned inti,idin,idout;intrd,re,len;slen=(stringlen)?stringlen:strlen((char *)input);if(slen==0) return 0;rd=slen%3;rd=(rd==0)?3:rd;//Maximun tri-byte blocks:imax=(slen+(3-rd))/3-1;for(i=0;i<=imax;i++){idin =i*3;idout=i*4;len=(i==imax)?rd:3;encodetribyte((unsigned char *)&input[idin],&b64[idout],len);}re=(imax+1)*4;b64[re]='\0';return re;}//Decode input byte stream, please ensure lenghth of out//buffer big enough to hold all codes.//The b64 code array size is about 3*(quad-byte blocks in b64 code).inline int Base64Decode(unsigned char * output,const unsigned char * b64,ULONG codelen=0) {if(!output||!b64||codelen<0) return 0;ULONG slen,imax;register unsigned inti,idin,idout;intrd,re,len;slen=(codelen)?codelen:strlen((char *)b64);if(slen<4) return 0;rd=slen%4;if(rd!=0) return 0; //Code error!.imax=slen/4-1;for(i=0;i<=imax;i++){idin =i*4;idout=i*3;len=decodetribyte((unsigned char *)&b64[idin],&output[idout]);}re=(imax*3)+len;output[re]='\0';return re;}//-----------------------------------------------------------------------------------------//--------------------------------------------------// Convert CString to char * string// Return string length://--------------------------------------------------inline unsigned char * CString2Char(constCString&str,int& converted){UINT len;DWORD error;unsigned char * buf=0;if(str==L"") return 0;len=str.GetLength()*sizeof(TCHAR)/sizeof(unsigned char)+1;buf=new unsigned char[len];memset(buf,0,sizeof(unsigned char)*len);converted=WideCharToMultiByte(CP_ACP,0,str,str.GetLength(),(char *)buf,len,0,0);if(converted==0){error=GetLastError();}return buf;}//----------------------------------------// 对CString字符串进行base64编码,// 编码后字符串变长大约1/3://----------------------------------------inline CStringStringBase64Encode(CString& text){CStringdest;unsigned char * bufchar=0,* buf64=0;UINT sz,bytes;//............................................// Convert text (Unicode) to UTF-8://............................................//A. Get buffer size when converted to UTF-8.// Remember to add one byte to hold '\0':bytes=WideCharToMultiByte(CP_UTF8,0,text.GetBuffer(),text.GetLength(),NULL,0,0,0); //B. Convert string to UTF-8 format:sz=bytes+1;bufchar=new unsigned char[sz];memset(bufchar,0,sizeof(unsigned char)*sz);WideCharToMultiByte(CP_UTF8,0,text.GetBuffer(),text.GetLength(),(char*)bufchar,bytes,0,0);//............................................// Convert UTF-8 to base64 code://............................................sz=(bytes+(3-bytes%3))/3*4+1;buf64=new unsigned char[sz]; //Multiply 2 to avoid memory overflow.memset(buf64,0,sizeof(unsigned char)*sz);Base64Encode(buf64,bufchar);//Convert to Base64 code.dest=buf64; //Get base64 code//............................................// Delete pointers and return://............................................if(bufchar)delete [] bufchar;if(buf64)delete [] buf64;return dest;}//----------------------------------------// 对CString字符串进行base64解码:// 解码后字符串变短大约1/4://----------------------------------------inline CString StringBase64Decode(CString& base64code){CStringdest;unsigned char * buf64=0, * bufu8=0;wchar_t * bufchar=0;UINT sz;int u8len;//............................................//Convert base64 code from Unicode to char://............................................buf64=CString2Char(base64code,(int&)u8len);if(buf64==0){delete [] buf64;return L"";}//............................................//Decode base64 code, we obtain string in// UTF-8 format://............................................bufu8=new unsigned char[u8len*2]; //When decoding, string size will decrease, //therefore size of bufu8 is the same as//that of buf64.memset(bufu8,0,sizeof(unsigned char)*u8len*2);Base64Decode(bufu8,buf64,u8len);//............................................// Convert UTF-8 to original text (Unicode)://............................................//A. Get buffer size when converted to text:sz=MultiByteToWideChar(CP_UTF8,0,(char *)bufu8,u8len,NULL,0);//B. Decode string to original text:bufchar=new wchar_t[sz];memset(bufchar,0,sizeof(wchar_t)*sz);MultiByteToWideChar(CP_UTF8,0,(char *)bufu8,u8len,bufchar,sz);dest=bufchar;//Get original textif(buf64)delete [] buf64;if(bufu8)delete [] bufu8;if(bufchar)delete [] bufchar;return dest;}//***************************************************************************** ********// Base64编码命名空间结束//***************************************************************************** ********};#endif // #ifndef _BASE64_INCLUDE__H__#include <string>using namespace std;class ZBase64{public:/*编码DataByte[in]输入的数据长度,以字节为单位*/string Encode(const unsigned char* Data,intDataByte);/*解码DataByte[in]输入的数据长度,以字节为单位OutByte[out]输出的数据长度,以字节为单位,请不要通过返回值计算输出数据的长度*/string Decode(const char* Data,intDataByte,int&OutByte);};#include "stdAfx.h"#include "ZBase64.h"string ZBase64::Encode(const unsigned char* Data,intDataByte){//编码表const char EncodeTable[]="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";//返回值string strEncode;unsigned char Tmp[4]={0};intLineLength=0;for(inti=0;i<(int)(DataByte / 3);i++){Tmp[1] = *Data++;Tmp[2] = *Data++;Tmp[3] = *Data++;strEncode+= EncodeTable[Tmp[1] >> 2];strEncode+= EncodeTable[((Tmp[1] << 4) | (Tmp[2] >> 4)) & 0x3F];strEncode+= EncodeTable[((Tmp[2] << 2) | (Tmp[3] >> 6)) & 0x3F];strEncode+= EncodeTable[Tmp[3] & 0x3F];if(LineLength+=4,LineLength==76) {strEncode+="\r\n";LineLength=0;} }//对剩余数据进行编码int Mod=DataByte % 3;if(Mod==1){Tmp[1] = *Data++;strEncode+= EncodeTable[(Tmp[1] & 0xFC) >> 2];strEncode+= EncodeTable[((Tmp[1] & 0x03) << 4)];strEncode+= "==";}else if(Mod==2){Tmp[1] = *Data++;Tmp[2] = *Data++;strEncode+= EncodeTable[(Tmp[1] & 0xFC) >> 2];strEncode+= EncodeTable[((Tmp[1] & 0x03) << 4) | ((Tmp[2] & 0xF0) >> 4)]; strEncode+= EncodeTable[((Tmp[2] & 0x0F) << 2)];strEncode+= "=";}return strEncode;}string ZBase64::Decode(const char* Data,intDataByte,int&OutByte){//解码表const char DecodeTable[] ={, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,, // '+', 0, 0,, // '/', 53, 54, 55, 56, 57, 58, 59, 60, 61, // '0'-'9', 0, 0, 0, 0, 0, 0,, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, // 'A'-'Z', 0, 0, 0, 0, 0,, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38,, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, // 'a'-'z'};//返回值string strDecode;intnValue;inti= 0;while (i<DataByte){if (*Data != '\r' && *Data!='\n'){nValue = DecodeTable[*Data++] << 18;nValue += DecodeTable[*Data++] << 12;strDecode+=(nValue& 0x00FF0000) >> 16;OutByte++;if (*Data != '='){nValue += DecodeTable[*Data++] << 6;strDecode+=(nValue& 0x0000FF00) >> 8;OutByte++;if (*Data != '='){nValue += DecodeTable[*Data++];strDecode+=nValue& 0x000000FF;OutByte++;}}i += 4;}else// 回车换行,跳过{Data++;i++;}}return strDecode;}CStringCScanDlg::EncodeImage(){//对图片进行Base64编码ZBase64 zBase;//图片编码CxImage image; // 定义一个CxImage对象image.Load(this->m_strImgPath, CXIMAGE_FORMAT_JPG); //先装载jpg文件,需要指定文件类型long size=0;//得到图像大小BYTE* buffer=0;//存储图像数据的缓冲image.Encode(buffer,size,CXIMAGE_FORMAT_JPG);//把image对象中的图像以type类型数据copy到bufferstring strTmpResult=zBase.Encode(buffer,size);CString result;result = strTmpResult.c_str();return result;}void CScanDlg::DecodeImageData(CStringstrData){//对Base64编码过的数据解码并显示原图片ZBase64 zBase;intOutByte=0;string strTmpResult=zBase.Decode(strData,strData.GetLength(),OutByte);inti,len = strTmpResult.length();BYTE *buffer = new BYTE[len];for (i=0;i<len;++i){buffer[i] = strTmpResult[i];}CxImage image(buffer,len,CXIMAGE_FORMAT_JPG);//把内存缓冲buffer中的数据构造成Image 对象delete [] buffer;CDC* hdc = m_picture.GetDC();m_bitmap = image.MakeBitmap(hdc->m_hDC);HBITMAP h0ldBmp = m_picture.SetBitmap(m_bitmap);if(h0ldBmp) DeleteObject(h0ldBmp);if(hdc->m_hDC) m_picture.ReleaseDC(hdc);if(m_bitmap) DeleteObject(m_bitmap);}#ifndef ___BASE64_H___#define ___BASE64_H___#include <string>using namespace std;class CBase64{public:CBase64();~CBase64();bool static Encode(const unsigned char *pIn, unsigned long uInLen, string&strOut);bool static Encode(const unsigned char *pIn, unsigned long uInLen, unsigned char *pOut, unsigned long *uOutLen);bool static Decode(const string&strIn, unsigned char *pOut, unsigned long *uOutLen) ;bool static Decode(const unsigned char *pIn, unsigned long uInLen, unsigned char *pOut, unsigned long *uOutLen) ;};#endif // ___BASE64_H___#include "StdAfx.h"#include "CBase64.h"static const char *g_pCodes = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";static const unsigned char g_pMap[256] ={255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,255, 255, 255, 255, 255, 255, 255, 62, 255, 255, 255, 63,52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 255, 255,255, 254, 255, 255, 255, 0, 1, 2, 3, 4, 5, 6,7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18,19, 20, 21, 22, 23, 24, 25, 255, 255, 255, 255, 255,255, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36,37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48,49, 50, 51, 255, 255, 255, 255, 255, 255, 255, 255, 255,255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,255, 255, 255, 255};CBase64::CBase64(){}CBase64::~CBase64(){}bool CBase64::Encode(const unsigned char *pIn, unsigned long uInLen, unsigned char *pOut, unsigned long *uOutLen){unsigned long i, len2, leven;unsigned char *p;if(pOut == NULL || *uOutLen == 0)return false;//ASSERT((pIn != NULL) && (uInLen != 0) && (pOut != NULL) && (uOutLen != NULL));len2 = ((uInLen + 2) / 3) << 2;if((*uOutLen) < (len2 + 1)) return false;p = pOut;leven = 3 * (uInLen / 3);for(i = 0; i<leven; i += 3){*p++ = g_pCodes[pIn[0] >> 2];*p++ = g_pCodes[((pIn[0] & 3) << 4) + (pIn[1] >> 4)];*p++ = g_pCodes[((pIn[1] & 0xf) << 2) + (pIn[2] >> 6)];*p++ = g_pCodes[pIn[2] & 0x3f];pIn += 3;}if (i<uInLen){unsigned char a = pIn[0];unsigned char b = ((i + 1) <uInLen) ? pIn[1] : 0;unsigned char c = 0;*p++ = g_pCodes[a >> 2];*p++ = g_pCodes[((a & 3) << 4) + (b >> 4)];*p++ = ((i + 1) <uInLen) ? g_pCodes[((b & 0xf) << 2) + (c >> 6)] : '=';*p++ = '=';}*p = 0; // Append NULL byte*uOutLen = p - pOut;return true;}bool CBase64::Encode(const unsigned char *pIn, unsigned long uInLen, string&strOut) {unsigned long i, len2, leven;strOut = "";//ASSERT((pIn != NULL) && (uInLen != 0) && (pOut != NULL) && (uOutLen != NULL)); len2 = ((uInLen + 2) / 3) << 2;//if((*uOutLen) < (len2 + 1)) return false;//p = pOut;leven = 3 * (uInLen / 3);for(i = 0; i<leven; i += 3){strOut += g_pCodes[pIn[0] >> 2];strOut += g_pCodes[((pIn[0] & 3) << 4) + (pIn[1] >> 4)];strOut += g_pCodes[((pIn[1] & 0xf) << 2) + (pIn[2] >> 6)];strOut += g_pCodes[pIn[2] & 0x3f];pIn += 3;}if (i<uInLen){unsigned char a = pIn[0];unsigned char b = ((i + 1) <uInLen) ? pIn[1] : 0;unsigned char c = 0;strOut += g_pCodes[a >> 2];strOut += g_pCodes[((a & 3) << 4) + (b >> 4)];strOut += ((i + 1) <uInLen) ? g_pCodes[((b & 0xf) << 2) + (c >> 6)] : '=';strOut += '=';}//*p = 0; // Append NULL byte//*uOutLen = p - pOut;return true;}bool CBase64::Decode(const string&strIn, unsigned char *pOut, unsigned long *uOutLen) {unsigned long t, x, y, z;unsigned char c;unsigned long g = 3;//ASSERT((pIn != NULL) && (uInLen != 0) && (pOut != NULL) && (uOutLen != NULL)); for(x = y = z = t = 0; x <strIn.length(); x++){c = g_pMap[strIn[x]];if(c == 255) continue;if(c == 254) { c = 0; g--; }t = (t << 6) | c;if(++y == 4){if((z + g) > *uOutLen) { return false; } // Buffer overflowpOut[z++] = (unsigned char)((t>>16)&255);if(g > 1) pOut[z++] = (unsigned char)((t>>8)&255);if(g > 2) pOut[z++] = (unsigned char)(t&255);y = t = 0;}}*uOutLen = z;return true;}// BASE64.cpp : Defines the entry point for the console application.//#include "stdafx.h"#include "CBase64.h"#include <iostream>using namespace std;int main(intargc, char* argv[]){unsigned long len = 10;unsigned char pIn[100];unsigned char pOut[100];memcpy(pIn,"你好",5);string strout;cout<<(char*)pIn<<endl;if(CBase64::Encode(pIn, 4, strout))cout<<strout<<endl;elsecout<<"加密失败"<<endl;string stroIn = strout;cout<<stroIn<<endl;memset(pOut,0,sizeof(pOut));if(CBase64::Decode(stroIn, pOut, &len)){cout<<(char *)pOut<<endl;cout<<"len="<<strlen((char *)pOut)<<endl; }elsecout<<"解密失败"<<endl;cout<<len<<endl;return 0;}。

相关文档
最新文档