lab3 code.txt
上传用户:jbtbattery
上传日期:2022-08-06
资源大小:1k
文件大小:2k
源码类别:

加密解密

开发平台:

Visual C++

  1. /*RC4的加密程序*/
  2. #include "stdafx.h"
  3. #include <stdio.h>
  4. #include <string.h>
  5. void swap(unsigned char &s,unsigned char &t)  //交换函数
  6. {
  7. char temp;
  8. temp=s;
  9. s=t;
  10. t=temp;
  11. }
  12. void Encrypt(char *inputfile, char *outputfile, char *key) //加密函数
  13. {
  14. unsigned char S[256];
  15. unsigned char T[256];
  16. unsigned char temp = 0;
  17. unsigned char plaint,cipher;
  18. long filelength = 0;
  19. int i=0;
  20. int j = 0;
  21. int t;
  22. unsigned char k;
  23. t=k = 0;
  24. for (i=0; i<256; i++)   //初始化S
  25. {
  26. S[i] = i;
  27. T[i] = key[i % strlen(key)];
  28. }
  29. for ( i=0; i<256; i++)   //用T产生的S的初始置换
  30. {
  31. j = (j + S[i] + T[i] ) % 256;
  32. swap(S[i],T[i]);  //S[i]和T[i]进行交换
  33. }
  34. i = j =0;
  35. FILE *sourFile, *destFile;
  36. sourFile = fopen(inputfile, "rb"); //打开文件
  37. destFile = fopen(outputfile, "wb"); //打开文件
  38. fseek(sourFile, 0L, SEEK_END); //把sourFile指针移动到文件尾部
  39. filelength = ftell(sourFile);  //计算文件长度
  40. fseek(sourFile, 0L, SEEK_SET);  //把sourFile指针移动到文件开头
  41. for (i=0; i<filelength; i++)   //密钥流生成
  42. {
  43. j = (i+1) % 256;
  44. j = (j + S[i]) % 256;
  45. swap(S[i],S[j]);     //S[i]和S[j]进行交换
  46. t= (S[i] + S[j]) % 256;
  47. k = S[t];
  48. fread(&plaint, 1,1, sourFile); //读取文件
  49. cipher = plaint ^ k;
  50. fwrite(&cipher, 1,1, destFile); //写入文件操作
  51. }
  52. fclose(sourFile);  //关闭文件sourFile
  53. fclose(destFile);  //关闭文件destFile
  54. }
  55. int main(int argc ,char *argv[])
  56. {
  57. if(argc!=6)
  58.         {
  59. puts("参数是:s-des cipher -e/-d key inputfile outputfile");
  60.             return 0;
  61. }
  62. Encrypt(argv[4],argv[5],argv[3]);
  63. return 0;
  64. }