| 域名空间 下载中心 社区论坛 信息公告 my小屋 |
![]() |
联系我们 设为首页 加入收藏 |
|
首页 | 新闻资讯 | 编程开发 | 网页设计 | 图形图象 | 网络媒体 | 网站模板 | 数 据 库 | 投稿 论坛 | 操作系统 | 系统优化 | 网络安全 | 黑客技术 | 硬件学堂 | 硬件报价 | 服 务 器 | 地图 专题 | 应用软件 | 聊天通讯 | q q 专栏 | 建站经验 | 在线工具 | 站长club | 注 册 表 | 旧版 社会 | 游戏娱乐 | 设计欣赏 | 疑难解答 | 社区论坛 | 韩国素材 | 素材图库 | 广告服务 | 服务 |
| 新版上线![旧版] | |||||
注:打开慢时请稍等
请问,base64算法怎么实现的?http://www.iyit.net 日期:2006-10-6 15:39:25 来源:iyit.net收集 点击: |
最好有源代码,在线等~~~~~~~~~~ --------------------------------------------------------------- #include <stdio.h> #include <stdlib.h> #include <string.h> #include <conio.h> /* windows special */ char* alphabet = "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz012345 6789+/="; char* encode(char data[], int length) { int i, index, val; int quad, trip; /* bool type: 0 or 1 */ char* out; out = malloc( (((length+2)/3)*4) * sizeof(char) ); for (i=0, index=0; i<length; i+=3, index+=4) { quad = 0; trip = 0; val = (0xff & (int) data[i]); val <<= 8; if ((i+1) < length) { val ¦= (0xff & (int) data[i+1]); trip = 1; } val <<= 8; if ((i+2) < length) { val ¦= (0xff & (int) data[i+2]); quad = 1; } out[index+3] = alphabet[(quad ? (val & 0x3f): 64)]; val >>= 6; out[index+2] = alphabet[(trip ? (val & 0x3f): 64)]; val >>= 6; out[index+1] = alphabet[val & 0x3f]; val >>= 6; out[index+0] = alphabet[val & 0x3f]; } out[index] = '\0'; return out; } void init_codes(char codes[]) { int i; for (i = 0; i < 256; i++) codes[i] = -1; for (i = 'a'; i <= 'z'; i++) codes[i] = i - 'a'; for (i = 'a'; i <= 'z'; i++) codes[i] = 26 + i - 'a'; for (i = '0'; i <= '9'; i++) codes[i] = 52 + i - '0'; codes['+'] = 62; codes['/'] = 63; } char* decode(char data[],int length) { int value, ix; int shift = 0; /* # of excess bits stored in accum */ int accum = 0; /* excess bits */ int index = 0; int len; char codes[256]; char* out; len = ((length + 3) / 4) * 3; if (length>0 && data[length-1] == '=') --len; if (length>1 && data[length-2] == '=') --len; printf("%d\n",sizeof(char)); out = (char*)malloc(len * sizeof(char)); init_codes(codes); for (ix=0; ix<length; ix++) { value = codes[ data[ix] & 0xff ]; /* ignore high byte of char */ if ( value >= 0 ) { /* skip over non-code */ accum <<= 6; /* bits shift up by 6 each time thru */ shift += 6; /* loop, with new bits being put in */ accum ¦= value; /* at the bottom. */ if ( shift >= 8 ) { /* whenever there are 8 or more shifted in, */ shift -= 8; /* write them out (from the top, leaving any */ out[index++] = /* excess at the bottom for next iterati on. */ ((accum >> shift) & 0xff); } } } out[index] = '\0'; if (index != len) printf("miscalculated data length!\n"); return out; } int main() { char* data1 = "z3vlc3q6cgfzc3dvcmq="; char* data2 = "guest:password"; char* out1; char* out2; out1 = decode(data1,strlen(data1)); out2 = encode(data2,strlen(data2)); printf("[%s]\n[%s]\n",out1,out2); getch(); /* windows special */ } 编辑:黑鹰 [发送给好友] [打印本页] [关闭窗口] [返回顶部] 上一篇:怎么通过一维数组向多维数组赋值???比如:$array1(一维)$array2(多维)我要通过$array1来为$array2赋值,怎么写啊? 下一篇:一个关于php的对象,函数,数组的综合问题,高手请进 转载请注明来源:www.iyit.net 特别声明: 本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作者。文章版权归文章原始作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转载的文章有版权问题请联系编辑人员,我们尽快予以更正。 |
| 相关文章 | ||||
| 设置首 页 - 版权声明 - 广告服务 - 关于我们 - 联系我们 - 友情连接 |
| |||||||