经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » C 语言 » 查看文章
C语言实现任何文件的加密解密功能
来源:jb51  时间:2019/3/20 8:32:56  对本文有异议

本文实例为大家分享了C语言实现文件加密解密功能的具体代码,供大家参考,具体内容如下

使用命令提示符,实现任何文件的加密和解密功能。

代码如下:

  1. //#define _CRT_SECURE_NO_WARNINGS
  2. #include <stdio.h>
  3. #include <string.h>
  4. #include <stdlib.h>
  5. #include<time.h>
  6. #include<sys/stat.h>
  7. #pragma warning(disable:4996)
  8. //加密
  9. void Encryption(char *p, size_t n)
  10. {
  11. for (int i = 0; i < n;++i)
  12. {
  13. *p += 7;
  14. }
  15. }
  16. //解密
  17. void Decrypt(char *p, size_t n)
  18. {
  19. for (int i = 0; i < n;++i)
  20. {
  21. *p -= 7;
  22. }
  23. }
  24. char *EnOrDe = {0};
  25. int main(int argc, char *args[])
  26. {
  27. clock_t c1 = clock();//系统当前时间,毫秒为单位
  28. char *FileNameSrc = (char *)calloc(160, sizeof(char));//待操作文件
  29. char *p2 = (char *)calloc(200, sizeof(char));//操作后文件名
  30. //从命令行获取文件名和要处理的操作
  31. FileNameSrc = args[1];//文件名,包含路径
  32. char *p1 = args[1];
  33. EnOrDe = args[2];//en表示加密,de表示解密
  34. /*FileNameSrc = "E:\\iPhone6-new.txt" ;
  35. char *p1 = FileNameSrc;
  36. EnOrDe = "de";*/
  37. /**********处理生成新的文件名***********/
  38. //char *p2 = { 0 };
  39. /*FileNameSrc = p1;*/
  40. //printf("%s\n", FileNameSrc);
  41. //printf("%s\n", EnOrDe);
  42. int index = 0;
  43. while (*p1)
  44. {
  45. if (*p1!='.')
  46. {
  47. *p2 = *p1;
  48. p2++;
  49. p1++;
  50. index++;
  51. }
  52. else if (*p1 == '.')
  53. {
  54. *p2 = '_';
  55. p2++;
  56. *p2 = 'H';
  57. p2++;
  58. *p2 = '.';
  59. p2++;
  60. p1++;
  61. index+=2;
  62. }
  63. }
  64. printf("\n");
  65. printf("信息摘要:\n");
  66. printf("--------------------------------------\n");
  67. printf("原文件:%s\n", FileNameSrc);
  68. printf("操作:%s (en——加密,de——解密)\n", EnOrDe);
  69. printf("预计结果文件:%s\n", p2 - index - 1);
  70. printf("--------------------------------------\n\n");
  71. printf("请稍后,玩命处理中......\n");
  72. char *FileNameDst = p2 - index - 1;
  73. FILE *pr = fopen(FileNameSrc, "rb");
  74. FILE *pw = fopen(FileNameDst, "wb");
  75. struct stat st = { 0 };
  76. size_t fileSize = st.st_size;//以字节为单位
  77. //char *buf = NULL;
  78. //if (fileSize<1024*1024)//小于1M
  79. //{
  80. // buf = malloc(sizeof(char) * 1024 * 20);//分配20K
  81. //}
  82. //else
  83. //{
  84. // buf = malloc(sizeof(char)*fileSize / 10);
  85. //}
  86. char *buf = calloc(1024 * 1024 * 25, sizeof(int));//分配100M
  87. /*************定义函数指针***************/
  88. void(*pFunc)(char *, size_t);
  89. pFunc = NULL;
  90. if (strcmp(EnOrDe, "en") == 0)
  91. {
  92. pFunc = Encryption;
  93. }
  94. else if (strcmp(EnOrDe, "de") == 0)
  95. {
  96. pFunc = Decrypt;
  97. }
  98. /*************定义函数指针***************/
  99. while (!feof(pr))
  100. {
  101. //memset(buf, 0, sizeof(buf));//calloc自动初始化为0
  102. size_t res = fread(buf, sizeof(char), sizeof(buf), pr);
  103. pFunc(buf, res);
  104. fwrite(buf, sizeof(char), res, pw);
  105. }
  106. fclose(pr);
  107. fclose(pw);
  108. printf("\n");
  109. printf("--------------------------------------\n");
  110. printf("执行成功!\n所在目录:%s\n", FileNameDst);
  111. clock_t c2 = clock();//系统当前时间,毫秒为单位
  112. printf("耗时:%u毫秒\n", c2-c1);
  113. printf("--------------------------------------\n");
  114. return 0;
  115. }

效果:


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持w3xue。

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号