C语言—base64—加解密
1.加密
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
void jiami(char x,char y,char z);
char s[100];
int i,j;
char a[]="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
int main()
{
int len;
char str[100];
printf("base64需要加密的字符串:");
gets(str);
len=strlen(str);
for(i=0,j=0;i<=len-3;i+=3,j+=4)
{
jiami(str[i],str[i+1],str[i+2]);
}
if(len%3==1)
{
s[j]=a[str[len-1]>>2];
s[j+1]=a[str[len-1]<<4&0x3f];
s[j+2]='=';
s[j+3]='=';
}
if(len%3==2)
{
s[j]=a[str[len-2]>>2];
s[j+1]=a[(str[len-2]<<4|str[len-1]>>4)&0x3f];
s[j+2]=a[(str[len-1]<<2)&0x3f];
s[j+3]='=';
}
printf("\n加密之后:");
puts(s);
printf("\n");
system("pause");
return 0;
}
void jiami(char x,char y,char z)
{
s[j]=a[x>>2];
s[j+1]=a[(x<<4|y>>4)&0x3f];
s[j+2]=a[(y<<2|z>>6)&0x3f];
s[j+3]=a[z&0x3f];
}
2.解密
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
void jiemi(int a,int b,int c,int d);
char s[100];
int i,j;
char a[]="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
int main()
{
int len,len1;
int str1[100];
char str[100];
printf("base64需要解密的字符串:");
gets(str);
len=strlen(str);
for(i=0;i<len;i++)
{
for(j=0;j<64;j++)
{
if(str[i]==a[j])
{
str1[i]=j;
len1=i+1;
}
}
}
for(i=0,j=0;i<=len1-4;i+=4,j+=3)
{
jiemi(str1[i],str1[i+1],str1[i+2],str1[i+3]);
}
if(len1%4==2)
{
s[j]=str1[i]<<2|str1[i+1]>>4;
}
if(len1%4==3)
{
s[j]=str1[i]<<2|str1[i+1]>>4;
s[j+1]=str1[i+1]<<4|str1[i+2]>>2;
}
printf("\n解密之后:");
puts(s);
putchar('\n');
system("pause");
return 0;
}
void jiemi(int a,int b,int c,int d)
{
s[j]=a<<2|b>>4;
s[j+1]=b<<4|c>>2;
s[j+2]=c<<6|d;
}
演示: