3DES加密之后的乱码处理

maye100 2014-09-18 02:59:52
使用3DES加密后是乱码,应该怎么处理?
正常3DES加密之后是16进制吗?还是其它什么?

我想在log打印,怎么写?

谢谢
...全文
662 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
作业本_ 2014-10-24
  • 打赏
  • 举报
回复
同求.....
hustcyb 2014-09-22
  • 打赏
  • 举报
回复
加密后的数据是二进制数据,不是字符串,如果想转成字符串,可考虑base64编码
NextDj 2014-09-19
  • 打赏
  • 举报
回复
字符串加密之后的数据就不是正常的字符串; 当成字符串就会是空或者乱码;
mymtom 2014-09-18
  • 打赏
  • 举报
回复
3DES加密是按二进制加密的,不用处理的
赵4老师 2014-09-18
  • 打赏
  • 举报
回复
使用HexDump函数显示字节流。
dengqibin 2014-09-18
  • 打赏
  • 举报
回复
加密后已经成了字节流了,你按printf("%02X ", buf[0]);这种把buf里的内容打出来就可以了
maye100 2014-09-18
  • 打赏
  • 举报
回复
引用 3 楼 MisteryMethod 的回复:
是这样加密完后的密码不能当字符串来使用,只能当char *来使用,因为是块长度是固定的。 因为有很多不可见字符,所以需要一个字符一个字符的打印。 可以输出成0xFF这种形式的,每一个CHAR 进行一次取值,强转,16进制换算进行打印
求代码 别的项目对888888进行3DES加密(key是16位),结果是16位数字+大写字母 我该怎么也转换成这样?
MMinus 2014-09-18
  • 打赏
  • 举报
回复
是这样加密完后的密码不能当字符串来使用,只能当char *来使用,因为是块长度是固定的。 因为有很多不可见字符,所以需要一个字符一个字符的打印。 可以输出成0xFF这种形式的,每一个CHAR 进行一次取值,强转,16进制换算进行打印
maye100 2014-09-18
  • 打赏
  • 举报
回复
引用 1 楼 zhao4zhong1 的回复:
仅供参考:
#include <stdio.h>
#include <string.h>
FILE *f;
char buffer[4096];
int r,a;
void HexDump(char *buf,int len,int addr) {
    int i,j,k;
    char binstr[80];

    for (i=0;i<len;i++) {
        if (0==(i%16)) {
            sprintf(binstr,"%08x -",i+addr);
            sprintf(binstr,"%s %02x",binstr,(unsigned char)buf[i]);
        } else if (15==(i%16)) {
            sprintf(binstr,"%s %02x",binstr,(unsigned char)buf[i]);
            sprintf(binstr,"%s  ",binstr);
            for (j=i-15;j<=i;j++) {
                sprintf(binstr,"%s%c",binstr,('!'<buf[j]&&buf[j]<='~')?buf[j]:'.');
            }
            printf("%s\n",binstr);
        } else {
            sprintf(binstr,"%s %02x",binstr,(unsigned char)buf[i]);
        }
    }
    if (0!=(i%16)) {
        k=16-(i%16);
        for (j=0;j<k;j++) {
            sprintf(binstr,"%s   ",binstr);
        }
        sprintf(binstr,"%s  ",binstr);
        k=16-k;
        for (j=i-k;j<i;j++) {
            sprintf(binstr,"%s%c",binstr,('!'<buf[j]&&buf[j]<='~')?buf[j]:'.');
        }
        printf("%s\n",binstr);
    }
}
int main(int argc,char **argv) {
    if (argc<2) {
        fprintf(stderr,"Usage: %s filename.ext\n",argv[0]);
        return 2;
    }
    f=fopen(argv[1],"rb");
    if (NULL==f) {
        fprintf(stderr,"Can not open file [%s]!\n",argv[1]);
        return 1;
    }
    a=0;
    while (1) {
        r=fread(buffer,1,4096,f);
        HexDump(buffer,r,a);
        a+=r;
        if (r<4096) break;
    }
    fclose(f);
    return 0;
}
我把加密之后的密码当作字符串(%s)打印出来时是4个字符的乱码,长度8。这个乱码我可以直接拿来正确的解密,但调用接口的时候乱码肯定不行,该怎么弄? 麻烦说清楚点,我是搞java的………………
赵4老师 2014-09-18
  • 打赏
  • 举报
回复
仅供参考:
#include <stdio.h>
#include <string.h>
FILE *f;
char buffer[4096];
int r,a;
void HexDump(char *buf,int len,int addr) {
    int i,j,k;
    char binstr[80];

    for (i=0;i<len;i++) {
        if (0==(i%16)) {
            sprintf(binstr,"%08x -",i+addr);
            sprintf(binstr,"%s %02x",binstr,(unsigned char)buf[i]);
        } else if (15==(i%16)) {
            sprintf(binstr,"%s %02x",binstr,(unsigned char)buf[i]);
            sprintf(binstr,"%s  ",binstr);
            for (j=i-15;j<=i;j++) {
                sprintf(binstr,"%s%c",binstr,('!'<buf[j]&&buf[j]<='~')?buf[j]:'.');
            }
            printf("%s\n",binstr);
        } else {
            sprintf(binstr,"%s %02x",binstr,(unsigned char)buf[i]);
        }
    }
    if (0!=(i%16)) {
        k=16-(i%16);
        for (j=0;j<k;j++) {
            sprintf(binstr,"%s   ",binstr);
        }
        sprintf(binstr,"%s  ",binstr);
        k=16-k;
        for (j=i-k;j<i;j++) {
            sprintf(binstr,"%s%c",binstr,('!'<buf[j]&&buf[j]<='~')?buf[j]:'.');
        }
        printf("%s\n",binstr);
    }
}
int main(int argc,char **argv) {
    if (argc<2) {
        fprintf(stderr,"Usage: %s filename.ext\n",argv[0]);
        return 2;
    }
    f=fopen(argv[1],"rb");
    if (NULL==f) {
        fprintf(stderr,"Can not open file [%s]!\n",argv[1]);
        return 1;
    }
    a=0;
    while (1) {
        r=fread(buffer,1,4096,f);
        HexDump(buffer,r,a);
        a+=r;
        if (r<4096) break;
    }
    fclose(f);
    return 0;
}

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧