
正文
包含c语言base64函数的词条
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
C语言编程:编写一个函数base64加密
#include stdio.h
#include stdlib.h
#include string.h
const char *chlist = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
int encode_string(char* str, unsigned int length, char* stat) {
char s[103];
int i,j;
unsigned temp;
if(length = 0) return 1;
if(length 100) return 2;
str[length] = '\0';
strcpy(s,str);
while(strlen(s) % 3) strcat(s,"=");
for(i = 0,j = 0; s[i]; i += 3,j += 4) {
temp = s[i];
temp = (temp 8) + s[i + 1];
temp = (temp 8) + s[i + 2];
stat[j + 3] = chlist[temp 0X3F];
temp = 6;
stat[j + 2] = chlist[temp 0X3F];
temp = 6;
stat[j + 1] = chlist[temp 0X3F];
temp = 6;
stat[j + 0] = chlist[temp 0X3F];
}
stat[j] = '\0';
return 0;
}
int Index(char ch) {
int i;
for(i = 0; chlist[i]; ++i) {
if(chlist[i] == ch)
return i;
}
return -1;
}
void decode_string(char *s, char *t) {
unsigned temp;
int i,j,k,len = strlen(s);
if(len % 4) {
printf("无效数据。\n");
exit(2);
}
for(i = 0,j = 0; i = len; i += 4,j += 3) {
temp = 0;
for(k = 0; k 4; ++k)
temp = (temp 6) + Index(s[i + k]);
for(k = 2; k = 0; --k) {
t[j + k] = temp 0XFF;
temp = 8;
}
}
t[j + k] = '\0';
}
int main() {
char s[100] = "1a2a3s4dff5fj6u7M8B9P0O1U2";
char t[150],u[100];
printf("s = %s\n",s);
encode_string(s,strlen(s),t);
printf("t = %s\n",t);
decode_string(t,u);
printf("u = %s\n",u);
return 0;
}
相关问答
Q1: 如果用c/c++语言写一个每天定时在某个时间上qq的程序呢?
是想练习使用c语言吗?...
如果只是想实现这种功能,可以添加一个定时任务,用at命令,QQ是可以在命令行下启动且登录的,具体参数为:QQ路径\QQ.exe /START QQUIN:QQ号码 PWDHASH:Base64(MD5(QQ密码)) /STAT:40/41
其中最前面写QQ的安装路径,比如c:\tencent\qq.exe ,“QQ号码”替换成自己的 QQ号码就行了,”Base64(MD5(QQ密码))“是把QQ密码经过MD5加密后再进行Base64加密,两种加密方法网上都有,还都可以在线加密,很容易实现的,后面的/stat的参数是设置QQ的登录模式,40为隐身,41为在线。
这样,通过命令行的两条命令就可以实现每天定时登录QQ。
用c语言专门点的代码写的话我不会,但用c语言实现命令行功能的代码我会,用system("命令行代码");函数来实现在c程序中运行命令行代码的功能。
Q2: C语言的Base64解码
加一个break跳出循环即可。
#include stdio.h
#include string.h
int main(void)
{
char y[4000]/*原文本*/,b[3999*4/3]/*待解的Base64码*/,mb[64]/*Base64码表*/;
int i,j/*i,j为两个计数用的变量*/,zu/*将待解的Base64码分成4个字符一组,zu用于记录第几组*/;
for (i=0;i26;++i) mb[i]=i+65;
for (i=0;i26;++i) mb[i+26]=i+97;
for (i=0;i10;++i) mb[i+52]=i+48;
mb[62]='+';
mb[63]='/';/*对码表赋值*/
for(i=0;i4000;++i) y[i]=0;
for (i=0;i3999*4/3;b[i++]=0);/*清空两个字符串*/
fgets(b,3999*4/3-1,stdin);/*输入Base64码*/
for (i=0;istrlen(b)-1;++i)/*处理b中的每个字符*/
for (j=0;j64;++j)
if (mb[j]==b[i])
{
b[i]=j; /*寻找各字符对应的码表序号,貌似就是这里出的问题*/
break; /*一找到就跳出,可避免重复比较。没有这句会重复比较到最后,如果j的值刚好落在字符数字的ASCII码中,会引起的重复的给b[i]赋值*/
}
for (zu=0;zu(strlen(b)-1)/4;++zu)/*Base64解码*/
{
y[zu*3+0]=((b[zu*4+0]2))|(b[zu*4+1]4);
y[zu*3+1]=((b[zu*4+1]4))|(b[zu*4+2]2);
y[zu*3+2]=((b[zu*4+2]6))|b[zu*4+3];
}
printf("%s\n",y);/*输出原文本*/
return 0;
}
c语言base64函数的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于、c语言base64函数的信息别忘了在本站进行查找喔。








