❶ 高分求用C++写一道完整的加密程序
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <string.h>
void encrypt(char *in, char *pwd, char *out)
{
FILE *infile, *outfile;
char ch;
int i=0, PwdLen=0;
if ((infile=fopen(in, "rb"))==NULL)
{
printf("无法打开 %s\n"乱姿, in);
getch();
exit(1);
}
if ((outfile=fopen(out, "wb"))==NULL)
{
printf("无法打开或创建 %s\n", out);
getch();
exit(1);
}
while (pwd[PwdLen++]); //这里用来应付密码为空扰戚的情况
PwdLen--;
ch=fgetc(infile);
while (!feof(infile))
{
fputc(ch^pwd[i>=PwdLen?i=0:i++], outfile);
ch=fgetc(infile);
}
fclose(infile);
fclose(outfile);
}
int main(int argc, char *argv[])
{
char in[256];
char out[256];
char pwd[256];
if (argc!=4)
{
printf("要加/解缓陪陵密的文件路径和文件名:\n");
gets(in);
printf("密码:\n");
gets(pwd);
printf("输出路径和文件名:\n");
gets(out);
encrypt(in, pwd, out);
printf("\n\n任务完成!\n\n");
getch();
}
else encrypt(argv[1], argv[2], argv[3]);
return 0;
❷ C++文件的加密和解密代码
最简单的两种加解密方式
单字节操作 上下文无关
供参考
#include<stdio.h>
voiddo_0(FILE*fin,FILE*fout)
{
#undefKEY
#defineKEY0x37
intc;
while((c=fgetc(fin))!=EOF)
{
c^=KEY;
fputc(c,fout);
}
}
voiddo_1_0(FILE*fin,FILE*fout)
{
#undefKEY
#defineKEY0x06
intc;
while((c=fgetc(fin))!=EOF)
{
c+=KEY;
c%=256;
fputc(c,fout);
}
}
voiddo_1_1(FILE*fin,FILE*fout)
{
#undefKEY
#defineKEY0x06
intc;
while((c=fgetc(fin))!=EOF)
{
c+=256-KEY;
c%=256;
fputc(c,fout);
}
}
intmain()
{
intmode,type;
charin_file[128],out_file[128];
FILE*fp_in,*fp_out;
do
{
printf("selectrunmode:0->encrypt1->decrypt ");
scanf("%d",&mode);
}while(mode!=0&&mode!=1);
do
{
printf("selecttype:0/1 ");
scanf("%d",&type);
}while(type!=0&&type!=1);
getchar();
do
{
printf("inputfilename: ");
gets(in_file);
fp_in=fopen(in_file,"rb");
if(fp_in==NULL)
printf("cannotreadfile%s ",in_file);
}while(fp_in==NULL);
do
{
printf("outputfilename: ");
gets(out_file);
fp_out=fopen(out_file,"wb");
if(fp_out==NULL)
printf("cannotwritefile%s ",out_file);
}while(fp_out==NULL);
if(type==0)
do_0(fp_in,fp_out);
elseif(mode==0)
do_1_0(fp_in,fp_out);
elsedo_1_1(fp_in,fp_out);
fclose(fp_in);
fclose(fp_out);
return0;
}
❸ 用C语言给文件加密解密,详细简单的代码;;;;用c打开一txt文件,怎么写【新手初学】
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<string.h>
void dofile(char *in_fname,char *pwd,char out_file)
{
FILE *fp1,*fp2;
register char ch;
int j=0;
int j0=0;
fp1=fopen(in_fname,"rb");
if(fp1==NULL)
{
printf("cannot open in-file.\n");
exit(1); //如果不能打开要加密的文件,便退出程序、
}
fp2=fopen(out_file,"wb");
if(fp2==NULL)
{
printf("cannot open or create out-file.\n");
exit(1); //如果不能建立加密后的文件,便退出
}
while(pwd[++j0]);
ch=fgetc(fp1); //加密算法开始
while(!feof(fp1))
{
fputc(ch^pwd[j>j0?j=0:j++],fp2); //异或后写入fp2文件
ch=fgetc(fp1);
}
fclose(fp1);
fclose(fp2);
}
void main(int argc,char *argv[])
{
char in_fname[30];
char out_fname[30];
char pwd[8];
if(argc!=4)
{
printf("\nIn-fname:\n");
gets(in_fname);
printf("Password:\n");
gets(pwd);
printf("Out-file:\n");
gets(out_fname);
dofile(in_fname,pwd,out_fname);
}
else
{
strcpy(in_fname,argv[1]);
strcpy(pwd,argv[2]);
strcpy(out_fname,argv[3]);
dofile(in_fname,pwd,out_fname);
}
}
❹ 如何用C语言对文件进行加密和解密
对于加密要求不高的完全可以自己定义规则来进行加密。这种加密是很简单很自由的,例如你在存文件的时候可以将文件中的每个字符都加上一个数,然后读取该文件的时候再每个字符相应地减去那个数,即可实现就简单的加密,这样你储存的文件看上去就是乱码了。只是这个规则太简单,规则你可以自己定,加密与解密对着来就行了。
下面程序用异或操作对文件进行加密和解密
/****************** 设计思路 ******************/
// 根据用户输入的加密/机密密码,
// 每次都拿原文件和密码等长度的一个字符串和密码
// 对应元素异或进行加密/解密
// 另外因为是用异或方法,所以加密和解密就是同一个程序
// 即按照同样的加密即是对文件的解密
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <conio.h>
#include <stdlib.h>
char filename[256]; // 原文件
char password[256]; // 加密/解密密码
const char filenametemp[] = "temp15435255435325432543.temp"; // 加密/解密中间文件
void inputpass(char *pass); //密码输入以"******"显示
void main() {
FILE *fp; // 加密/解密的文件
FILE *fptemp; // 加密/解密过程临时文件
int pwdlen; // 密码长度
int i = 0; // 计数器
char ch = 0; // 读入的字符
printf("请输入要加密/解密的文件名(全路径名): \n");
gets(filename);
if( (fp = fopen(filename, "rb")) == NULL) {
printf("找不到文件 %s\n", filename);
exit(1);
} // if
printf("请输入要加密/解密的密码: \n");
inputpass(password);
pwdlen = strlen(password);
if(pwdlen == 0) {
printf("密码不能为空,加密/解密失败\n");
exit(1);
} // if
fptemp = fopen(filenametemp, "wb"); // 打开中间文件
while(1) {
ch = fgetc(fp);// 从原文件读入一个字符
if(feof(fp)) { // 已经读到文件尾
break; // 退出循环
}
ch ^= password[i++]; // 对原字符和密码进行异或操作
fputc(ch, fptemp); // 将异或结果写入中间文件
if(i == pwdlen) { // 使得原文件每和密码长度相同的固定长度异或加密
i = 0;
}
} // while
fclose(fp); // 关闭打开原文件
fclose(fptemp); // 关闭打开中间文件
remove(filename); // 删除原文件
rename(filenametemp, filename); // 将中间文件重命名为原文件
printf("加密/解密成功\n"); // 至此加密/解密成功
}
// 密码输入以"******"显示
void inputpass(char *pass) {
int i = 0;
char c;
while(isprint(c = getch())) {
pass[i++] = c;
// printf("*");
}
pass[i] = '\0';
printf("\n");
}
❺ c语言 数据加密
什么是异或算法
异或的特点是原始值经过两次异或某一个数后会变成原来的值,所以有时利用这个特性来进行加密,加密端把数据与一个密钥进行异或操作,生成密文。接收方收到密文后利用加密方提供的密钥进行再次异或操作就能得到明文。
例程:
/*以DWORD为单位对文件进行加密,将每个DWORD与0xfcba0000(密钥)做异或,写入另一个文件*/
#include<stdio.h>
#include<stdlib.h>
#defineDWORDunsignedlong
#defineBYTEunsignedchar
#definefalse0
#definetrue1
intmain(intargc,char*argv[])
{
FILE*hSource;
FILE*hDestination;
DWORDdwKey=0xfcba0000;
char*pbBuffer;
DWORDdwBufferLen=sizeof(DWORD);
DWORDdwCount;
DWORDdwData;
if(argv[1]==0||argv[2]==0)
{
printf("missingargument!
");
returnfalse;
}
char*szSource=argv[1];
char*szDestination=argv[2];
hSource=fopen(szSource,"rb");//打开源文件.
hDestination=fopen(szDestination,"wb");//打开目标文件
if(hSource==NULL){printf("openSourceFileerror!");returnfalse;}
if(hDestination==NULL){printf("openDestinationFileerror!");returnfalse;}
//分配缓冲区
pbBuffer=(char*)malloc(dwBufferLen);
do{
//从源文件中读出dwBlockLen个字节
dwCount=fread(pbBuffer,1,dwBufferLen,hSource);
//加密数据
dwData=*(DWORD*)pbBuffer;//char*TOdword
dwData^=dwKey;//xoroperation
pbBuffer=(char*)&dwData;
//将加密过的数据写入目标文件
fwrite(pbBuffer,1,dwCount,hDestination);
}while(!feof(hSource));
//关闭文件、释放内存
fclose(hSource);
fclose(hDestination);
printf("%sisencryptedto%s
",szSource,szDestination);
return0;
}
❻ C语言英文文本加密
#include "stdio.h"
#include <stdlib.h>
int main(int argc,char *argv[]){
FILE *fp,*fq;
int k,t;
fp=fopen("AAA12345678901.txt","w+");
if(!fp || (fq=fopen("tmp.txt","w"))==NULL){
printf("Failed to open the file and exit... ");
return 0;
}
printf("Please enter a short passage(letters+space+punctuation,'Enter' end)... ");
while((t=getchar())!=' ')//为文件输入内容
fputc(t,fp);
printf("Please enter the encryption key(int >0)... k=");
while(scanf("%d",&k)!=1 || k<1){//输入加密密钥并判断是否正确
printf("Input error, redo: ");
fflush(stdin);
}
rewind(fp);
while(t=fgetc(fp),!feof(fp))//加密
if(t>='A' && t<='Z')
fputc(((t-'A')+k)%26+'A',fq);
else if(t>='a' && t<='z')
fputc(((t-'a')+k)%26+'a',fq);
else
fputc(t,fq);
fclose(fp);//关闭原文件
fclose(fq);//关闭加密后的文件
remove("AAA12345678901.txt");//删除原文件
rename("tmp.txt","AAA12345678901.txt");//将加密后的文件更换为原文件名
printf(" ");
if(fp=fopen("AAA12345678901.txt","r")){
while((t=fgetc(fp))!=EOF)
printf("%c",t);
printf(" Encryption success! ");
}
else
printf(" Failed to open the encrypted file... ");
fclose(fp);
return 0;
}
代码格式和运行样例图片:
❼ 用C语言设计一个文件加密与解密程序
c语言文件加密和解密方法如下:
1、首先打开VC++6.0;
4、声明头文件
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
首先写个加密函数,算法就是简介里说的;
voidEncryptFile(FILE*sfp,FILE*dfp,charpwd)
{
charch;
if(sfp==0||dfp==0)
{
printf("ERROR!
");
return;
}
while((ch=fgetc(sfp))!=EOF)
{
if((ch>='a')&&(ch<='z'))
{
ch=(ch-'a'+1)%26+'a';
ch=ch^pwd;
}
if((ch>='A')&&(ch<='Z'))
{
ch=(ch-'A'+1)%26+'A';
ch=ch^pwd;
}
fputc(ch,dfp);
}
}
写解密子函数:与加密的过程相反;
voidDecryptFile(FILE*sfp,FILE*dfp,charpwd)
{
charch;
while((ch=fgetc(sfp))!=EOF)
{
if((ch>='a')&&(ch<='z'))
{
ch=ch^pwd;
ch=(ch-'a'+25)%26+'a';
}
if((ch>='A')&&(ch<='Z'))
{
ch=ch^pwd;
ch=(ch-'A'+25)%26+'A';
}
fputc(ch,dfp);
}
}
输出函数,输出文件内容
voidOutputFile(FILE*fp)
{
charch;
while((ch=fgetc(fp))!=EOF)
putchar(ch);
}
主函数,主要调用这几个函数
intmain()
{
/*用户输入的要加密的文件名*/
charsfilename[20];
/*用户输入加密后保存的文件名*/
chardfilename[20];
/*用来保存密码字符*/
charpwd;
FILE*sfp,*dfp;
printf(":
");
/*得到要加密的文件名*/
gets(sfilename);
/*得到加密后你要的文件名*/
printf(":
");
gets(dfilename);
/*得到加密字符*/
printf("PleaseinputyourPassword:
");
//scanf("%c",&pwd);
pwd=getch();
/*屏幕以*来表示输入的加密字符*/
printf("*
");
/*以只读方式打开要加密的文件*/
if((sfp=fopen(sfilename,"r"))==0)
{
printf("Can'topenthefile:%s
",sfilename);
exit(0);
}
/*输出要加密的文件*/
printf(":
");
OutputFile(sfp);
/*建立加密后的文件*/
if((dfp=fopen(dfilename,"w+"))==0)
{
printf("Can'topenorcreatethefile:%s
",dfilename);
//exit(0);
}
/*文件加密*/
fseek(sfp,0L,SEEK_SET);
EncryptFile(sfp,dfp,pwd);
printf("
Encryptedthefilesuccessfully!
");
/*输出加密后的文件*/
printf(":
");
fseek(dfp,0L,SEEK_SET);
OutputFile(dfp);
fclose(sfp);
fclose(dfp);
getch();
return0;
}
❽ 如何用C语言对文件进行加密和解密急求......................
文件分为文本文件和二进制文件。加密方法也略有不同。
1、文本文件
加密的主要是文本的内容,最简单的方法就是修改文档的内容,比如1.txt中的文件内容:
abcd
只要给每一个字符+1,就可以实现加密。文件内容即会变为
bcde
2、二进制文件加密
二进制文件加密也就是对应用程序加密,需要理解可执行文件格式,比如Windows平台的Exe文件它是PE结构,Linux上的可执行文件是ELF结构,要对这样的程序进行加密,实际上是开发一种叫做“壳”的程序,这种程序的开发,需要将扎实的底层基础,同时也需要对软件加密解密有细致的理解,比如流行的vmprotect、z壳以及早些年的upx壳、aspack等等。
3、无论哪种加密都牵涉到文件操作的问题,使用C语言进行文件操作时,极少使用C标准库中的I/O函数,大多数使用操作系统提供的内存文件映射相关的API函数,有兴趣,可以搜索相关的资料。