问个字符加密问题
我现在用C#写了个WinForm程序,将字符串加密后写进文本文件,然后再另外的机器(ARM)芯片的系统读取,然后解密,我做的是简单的与或操作加密,但是有个问题:在正常不加密的情况下,C#写进去的字符串能正常用C读出来,然而加密后在C语言解密就会乱码。
在C语言里面Char是八位的,但是在C#里面char是16位的,应该是这里出问题了,我在c#加密,然后用c#读文件,解密也正常读取,就是用C语言解密就乱码。
由于机器字符编码是GB2312的,我在C#写文件的时候也指定了GB2312字符编码,大概的情况是这样
请问高手:怎么才能做到加密后C能正确解密?由于程序内存空间不足和文件将很大,C语言那边我只能每次读取100个char出来,然后解密(字符串有中文)。 C,C#
[解决办法]
推荐使用WinHex软件查看硬盘或文件或内存中的原始字节内容。
不要把
fopen("...","...");fscanf,fprintf,fclose //读时把\r\n替换成\n,写时把\n替换成\r\n;读到\x1a就设置EOF;读写的内容当字符看待
和
fopen("...","...b");fread,fwrite,fclose //不作以上替换,遇到\x1a仍继续读;读写的内容当字节看待
弄混了
void HexDump(char *buf,int len) {
int i,j,k;
char binstr[80];
for (i=0;i<len;i++) {
if (0==(i%16)) {
sprintf(binstr,"%04x -",i);
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);
}
}