user-0 提问: 3DES加密之后的乱码处理

回复:
user: user-1
content: 同求.....

user: user-2
content: 加密后的数据是二进制数据，不是字符串，如果想转成字符串，可考虑base64编码

user: user-3
content: 字符串加密之后的数据就不是正常的字符串； 当成字符串就会是空或者乱码；

user: user-4
content: 3DES加密是按二进制加密的，不用处理的

user: user-5
content: 使用HexDump函数显示字节流。

user: user-6
content: 加密后已经成了字节流了，你按printf("%02X ", buf[0]);这种把buf里的内容打出来就可以了

user: user-0
content: 引用 3 楼 MisteryMethod 的回复:是这样加密完后的密码不能当字符串来使用，只能当char *来使用，因为是块长度是固定的。 因为有很多不可见字符，所以需要一个字符一个字符的打印。 可以输出成0xFF这种形式的，每一个CHAR 进行一次取值，强转，16进制换算进行打印   求代码  别的项目对888888进行3DES加密（key是16位），结果是16位数字+大写字母 我该怎么也转换成这样？

user: user-7
content: 是这样加密完后的密码不能当字符串来使用，只能当char *来使用，因为是块长度是固定的。 因为有很多不可见字符，所以需要一个字符一个字符的打印。 可以输出成0xFF这种形式的，每一个CHAR 进行一次取值，强转，16进制换算进行打印

user: user-0
content: 引用 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的………………

user: user-5
content: 仅供参考： #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; }