细说C语言文件加密实例
前言
每天一小步,成功一大步。大家好,我是程序猿小白 GW_gw,很高兴能和大家一起学习每天小知识。复制代码
以下内容部分来自于网络,如有侵权,请联系我删除,本文仅用于学习交流,不用作任何商业用途。
摘要
本文主要以实例来介绍C语言的文件操作和简单的对称加密。复制代码
异或操作加密文件
我们知道通过对同一个数进行相同的两次异或操作后,仍然能得到这个数。
(a^b)^b = a复制代码
我们就可以基于异或特性来进行文件加密解密。
主要步骤:
加密:
打开文件
读取文件并保存
对读取的文件进行异或操作
将操作后的文件写入新文件
解密:
打开加密后的文件
读取文件并保存
对读取的文件进行相同的异或操作
将操作后的文件写入新文件
#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