小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。
前言
每天一小步,成功一大步。大家好,我是程序猿小白 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;
}
通过代码可以看出对于对称加密来说,加密和解密的过程基本是一样的。
如果读者想了解更多的加密算法,欢迎点击传送门直达。
- 揭开对称加密算法的神秘面纱
- 比对称加密更安全的非对称加密你都了解了吗? 如果读者对C语言的文件操作也不太了解,也可以点击下方传送门直达。
- C语言--保姆教学,文件读写(一)
- C语言--保姆教学,文件读写(二)
- C语言--保姆教学,文件读写(三)
结语
希望以上实例和解释能对读者有所帮助,如有不正之处,欢迎掘友们斧正。