最简单的一小段文件加密程序(c语言)
2010-12-12 15:04
267 查看
“纸上得来终觉浅,绝知此事要躬行”
心血来潮,想写一段C语言的程序,实现一个文件的加密,打算采用最简单的加密办法,就是逐个字节取反。
第一次花了一刻钟时间写了如下代码的程序:
这里对这个程序说明下,里面最后几行,调用命令行的删除原来的文件,并将加密后的文件名改为原文件名。
编译OK后,测试了一下。
我自己制作了一个简单的二进制文件,16进制内容为:ff 00 11 22 33 00 ff,
加密后,发现文件的16进制为:00
回头看了看代码,确实有问题,因为fgetc函数,出错或者读到文件末尾,会返回值-1,即EOF,0xFFFF,但是程序中,也有可能真的存在0xff的值。
所以修改了代码如下:
这样测试后是ok的。
fgetc函数返回的值是int类型,如果强制的赋值给char类型,会导致当读出的数据为0xff时,误认为是EOF(-),导致程序出错。
心血来潮,想写一段C语言的程序,实现一个文件的加密,打算采用最简单的加密办法,就是逐个字节取反。
第一次花了一刻钟时间写了如下代码的程序:
/* * File encrypter sample */ #include <stdio.h> int main(void) { FILE *fp; FILE *temp; char ch; char ch2; char strFileName[256] = {0}; char cmdBuf[256]={0}; printf("please input file name:"); gets(strFileName); /* open two files */ fp = fopen(strFileName, "rb+"); if(fp == NULL) { printf("/n file: %s open err!/n", strFileName); return -1; } temp = fopen("temp.cry", "wb+"); if(temp == NULL) { printf("/n file create err!/n"); return -1; } /* Encrypter every character, and write it to file */ do { ch = fgetc(fp); ch2 = ~ch; fputc(ch2, temp); }while(ch != EOF); fclose(fp); fclose(temp); /* Del old file */ sprintf(cmdBuf, "del %s", strFileName); system(cmdBuf); /* rename new file */ sprintf(cmdBuf, "ren temp.cry %s", strFileName); system(cmdBuf); return 0; }
这里对这个程序说明下,里面最后几行,调用命令行的删除原来的文件,并将加密后的文件名改为原文件名。
编译OK后,测试了一下。
我自己制作了一个简单的二进制文件,16进制内容为:ff 00 11 22 33 00 ff,
加密后,发现文件的16进制为:00
回头看了看代码,确实有问题,因为fgetc函数,出错或者读到文件末尾,会返回值-1,即EOF,0xFFFF,但是程序中,也有可能真的存在0xff的值。
所以修改了代码如下:
/* * File encrypter sample */ #include <stdio.h> int main(void) { FILE *fp; FILE *temp; char ch; int ret = 0; char strFileName[256] = {0}; char cmdBuf[256]={0}; printf("please input file name:"); gets(strFileName); /* open two files */ fp = fopen(strFileName, "rb+"); if(fp == NULL) { printf("/n file: %s open err!/n", strFileName); return -1; } temp = fopen("temp.cry", "wb+"); if(temp == NULL) { printf("/n file create err!/n"); return -1; } /* Encrypter every character, and write it to file */ while(!feof(fp)) { ret = fgetc(fp); if(ret != EOF) { ch = (char)ret; ch = ~ch; fputc(ch, temp); } } fclose(fp); fclose(temp); /* Del old file */ sprintf(cmdBuf, "del %s", strFileName); system(cmdBuf); /* rename new file */ sprintf(cmdBuf, "ren temp.cry %s", strFileName); system(cmdBuf); return 0; }
这样测试后是ok的。
fgetc函数返回的值是int类型,如果强制的赋值给char类型,会导致当读出的数据为0xff时,误认为是EOF(-),导致程序出错。
相关文章推荐
- C语言写的一个简单文件加密程序
- 【Java】Swing+IO流实现一个简单的文件加密程序(较完整版)
- c语言简单文件加密
- C语言简单的文件加密
- 简单的C语言加密程序
- C语言实现简单文件加密
- Java批量加密解密文件简单小程序
- 【Java】Swing+IO流实现一个简单的文件加密程序(demo版)
- 【C语言】没事可以试试这个小程序,使用文件操作,模拟实现一个简单的文件拷贝工具!
- 一个简单的C++加密,解密文件程序
- C语言实现简单文件加密解密
- Visual Studio 2017中使用正则修改部分内容 如何使用ILAsm与ILDasm修改.Net exe(dll)文件 C#学习-图解教程(1):格式化数字字符串 小程序开发之图片转Base64(C#、.Net) jquery遍历table为每一个单元格取值及赋值 。net加密解密相关方法 .net关于坐标之间一些简单操作
- 编写多文件程序(c语言)
- 简单的C语言小程序、、!
- Wolf从零学编程-用Python打造简单加密程序(三)
- 对文件进行快速简单加密(防小白)
- 用C语言对数据或文件内容进行加密
- 一个简单的Linux内核代码整合到一个文件的Java程序
- linux下简单文件加密代码
- 晒晒自己学了这段时间的C语言自己写的简单的程序