阅读 74

细说C语言文件加密实例

前言

 每天一小步,成功一大步。大家好,我是程序猿小白 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;
 } 
复制代码

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


作者:Gw_gw
链接:https://juejin.cn/post/7023708355608707108


文章分类
后端
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐