首页 新闻 搜索 专区 学院

C有没有好用Linux下的的Base64加密的方法?中文转换有问题

0
悬赏园豆:5 [已关闭问题] 关闭于 2019-04-04 14:37

C有没有好用Linux下的的Base64加密的方法?中文加密有问题,编码以后的字符串不能解码,但是数字和英文加密后的字符串没问题,可以解码。

这是我在网上找的方法
char * Encbase64(char * orgdata,unsigned long orglen,unsigned long newlen)
{
char
p=NULL,ret=NULL;
int tlen=0;
if (orgdata==NULL|| orglen==0)
return NULL ;
tlen=orglen/3;
if(tlen%3!=0) tlen++;
tlen=tlen
4;
newlen=tlen;
if ((ret=(char
)malloc(tlen+1))==NULL)
return NULL;
memset(ret,0,tlen+1);
p=orgdata;tlen=orglen;

int i=0,j=0;
while(tlen>0)
{
Udata.c[0]=Udata.c[1]=Udata.c[2]=0;
for (i=0;i<3;i++)
{
if (tlen<1) break;
Udata.c[i]=(char)p;
tlen--;
p++;
}
if (i==0) break;
switch (i)
{
case 1:
/
ret[j++]=_Base[Udata.Sdata.d];
ret[j++]=_Base[Udata.Sdata.c];
ret[j++]=_Base[64];
ret[j++]=_Base[64];*/
ret[j++]=_Base[Udata.c[0]>>2];
ret[j++]=_Base[((Udata.c[0]&0x03)<<4)|((Udata.c[1]&0xf0)>>4)];
ret[j++]=_Base[64];
ret[j++]=_Base[64];
break;
case 2:
/*ret[j++]=_Base[Udata.Sdata.d];
ret[j++]=_Base[Udata.Sdata.c];
ret[j++]=_Base[Udata.Sdata.b];
ret[j++]=_Base[64];*/
ret[j++]=_Base[Udata.c[0]>>2];
ret[j++]=_Base[((Udata.c[0]&0x03)<<4)|((Udata.c[1]&0xf0)>>4)];
ret[j++]=_Base[((Udata.c[1]&0x0f)<<2)|((Udata.c[2]&0xc0)>>6)];
ret[j++]=_Base[64];
break;
case 3:
/*ret[j++]=_Base[Udata.Sdata.d];
ret[j++]=_Base[Udata.Sdata.c];
ret[j++]=_Base[Udata.Sdata.b];
ret[j++]=_Base[Udata.Sdata.a];*/
ret[j++]=_Base[Udata.c[0]>>2];
ret[j++]=_Base[((Udata.c[0]&0x03)<<4)|((Udata.c[1]&0xf0)>>4)];
ret[j++]=_Base[((Udata.c[1]&0x0f)<<2)|((Udata.c[2]&0xc0)>>6)];
ret[j++]=_Base[Udata.c[2]&0x3f];
break;
default:
break;
}
}
ret[j]='\0';
return ret;
}

Linux下aa就是调用的上面的方法,编码以后的字符是错的,完全不能解码。

Dellienware的主页 Dellienware | 初学一级 | 园豆:39
提问于:2019-03-18 09:24
< >
分享
所有回答(1)
0

可能不是加密出错,是解密出错。

你说中文不行,但是英文和数字没问题,说明是编码问题,但是你linux为什么会有编码问题呢?这个很奇怪。

建议你找个网页版的,然后对比一下网页上的加密结果和你程序的加密结果,这样可以确定是加密出错还是解密出错。

小木兽雪莱 | 园豆:216 (菜鸟二级) | 2020-08-04 21:19
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册