细说C语言文件加密实例

862 阅读3分钟

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。

前言

 每天一小步,成功一大步。大家好,我是程序猿小白 GW_gw,很高兴能和大家一起学习每天小知识。

以下内容部分来自于网络,如有侵权,请联系我删除,本文仅用于学习交流,不用作任何商业用途。

摘要

本文主要以实例来介绍C语言的文件操作和简单的对称加密。

异或操作加密文件

我们知道通过对同一个数进行相同的两次异或操作后,仍然能得到这个数。

 (a^b)^b = a

我们就可以基于异或特性来进行文件加密解密。

主要步骤:

加密:

  1. 打开文件
  2. 读取文件并保存
  3. 对读取的文件进行异或操作
  4. 将操作后的文件写入新文件

解密:

  1. 打开加密后的文件
  2. 读取文件并保存
  3. 对读取的文件进行相同的异或操作
  4. 将操作后的文件写入新文件
 #include<stdio.h>
 #include<stdlib.h>
 ​
 ​
 long fileRead(char fileName[50],char **buffer){
     //打开文件 
     FILE *fp = fopen(fileName,"rb");
     if(fp == NULL){
         printf("open file is failed");
         exit(1); 
     }
     //把文件指针移到文件末尾
     fseek(fp,0,SEEK_END); 
     //保存文件的长度 
     long fileSize = ftell(fp);
     //把文件指针移到文件开头 
     fseek(fp,0,SEEK_SET);
     //读取文件,保存到buffer中 
     *buffer = (char*)malloc(fileSize);  
     fread(*buffer,1,fileSize,fp);
     //关闭文件 
     fclose(fp);
     return fileSize;
 }
 ​
 ​
 void fileWrite(char fileName[50],char *buffer,long fileSize){
     //创建文件进行写入 
     FILE *fp = fopen(fileName,"wb");
     if(fp == NULL){
         printf("open file is failed");
         exit(1); 
     }
     fwrite(buffer,1,fileSize,fp);
     fclose(fp); 
 }
 ​
 ​
 void encrypt_decode(char encryptFile[50],char encryptedFile[50],int key){
     char *buffer;
     long fileSize = fileRead(encryptFile,&buffer);
     
     //加密 / 解密 
     for(int i = 0; i < fileSize; i++){
         buffer[i] = buffer[i]^key;
     }
 ​
     fileWrite(encryptedFile,buffer,fileSize);
 } 
 ​
 ​
 void encrypt(){
     char encryptFile[50];//原文件名 
     int key;//加密关键字 
     char encryptedFile[50];//加密后文件名 
     //输出提示信息 
     printf("Please input the filename you want to encrypt: ");
     scanf("%s",encryptFile);
     printf("Please input key:");
     scanf("%d",&key);
     printf("Please input the encrypted filename:");
     scanf("%s",encryptedFile);
  
     encrypt_decode(encryptFile,encryptedFile,key);
 }
 ​
 void decode(){
     char encryptedFile[50];//加密后文件名 
     int key;//加密关键字
     char decodeFile[50];//原文件名 
     //输出提示信息 
     printf("Please input the encrypted filename: ");
     scanf("%s",encryptedFile);
     printf("Please input key:");
     scanf("%d",&key);
     printf("Please input output filename:");
     scanf("%s",decodeFile);
  
     encrypt_decode(encryptedFile,decodeFile,key);
 }
 ​
 int main(){
     
     encrypt();
     decode();
     
     return 0;
 } 

通过代码可以看出对于对称加密来说,加密和解密的过程基本是一样的。

如果读者想了解更多的加密算法,欢迎点击传送门直达。

  1. 揭开对称加密算法的神秘面纱
  2. 比对称加密更安全的非对称加密你都了解了吗? 如果读者对C语言的文件操作也不太了解,也可以点击下方传送门直达。
  3. C语言--保姆教学,文件读写(一)
  4. C语言--保姆教学,文件读写(二)
  5. C语言--保姆教学,文件读写(三)

结语

希望以上实例和解释能对读者有所帮助,如有不正之处,欢迎掘友们斧正。