导航:首页 > 文档加密 > c语言中明文暗文加密注意什么

c语言中明文暗文加密注意什么

发布时间:2022-07-16 13:02:31

❶ 什么是明文,什么是暗文,什么是非对称加密,什么是对称加密有什么区别

明文是加密前的文件,暗文是加密后的文件。

与对称加密算法不同,非对称加密算法需要两个密钥:公开密钥(publickey)和私有密钥(privatekey)。公开密钥与私有密钥是一对,如果用公开密钥对数据进行加密,只有用对应的私有密钥才能解密;如果用私有密钥对数据进行加密,那么只有用对应的公开密钥才能解密。因为加密和解密使用的是两个不同的密钥,所以这种算法叫作非对称加密算法。

非对称加密算法实现机密信息交换的基本过程是:甲方生成一对密钥并将其中的一把作为公用密钥向其它方公开;得到该公用密钥的乙方使用该密钥对机密信息进行加密后再发送给甲方;甲方再用自己保存的另一把专用密钥对加密后的信息进行解密。甲方只能用其专用密钥解密由其公用密钥加密后的任何信息。

非对称加密算法的保密性比较好,它消除了最终用户交换密钥的需要,但加密和解密花费时间长、速度慢,它不适合于对文件加密而只适用于对少量数据进行加密。

❷ c语言中的文件加密

首先打开VC++6.0

选择文件,新建

选择C++ source file 新建一个空白文档

声明头文件
#include<stdio.h>
#include<stdlib.h>
#include<string.h>

首先写个加密函数,算法就是简介里说的
void EncryptFile(FILE *sfp,FILE *dfp,char pwd)
{
char ch;
if(sfp==0||dfp==0)
{
printf("ERROR!\n");
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);
}
}

写解密子函数:与加密的过程相反
void DecryptFile(FILE *sfp,FILE *dfp,char pwd)
{
char ch;
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);
}
}

输出函数,输出文件内容
void OutputFile(FILE *fp)
{
char ch;
while((ch=fgetc(fp))!=EOF)
putchar(ch);
}

主函数,主要调用这几个函数
int main()
{
/*用户输入的要加密的文件名*/
char sfilename[20];
/*用户输入加密后保存的文件名*/
char dfilename[20];
/*用来保存密码字符*/
char pwd;
FILE *sfp,*dfp;

printf("\nPlease input filename to be encrypted:\n");
/*得到要加密的文件名*/
gets(sfilename);
/*得到加密后你要的文件名*/
printf("input filename to save the encrypted file:\n");
gets(dfilename);
/*得到加密字符*/
printf("Please input your Password:\n");
//scanf("%c",&pwd);
pwd=getch();
/*屏幕以*来表示输入的加密字符*/
printf("*\n");
/*以只读方式打开要加密的文件*/
if((sfp=fopen(sfilename,"r"))==0)
{
printf("Can't open the file :%s\n",sfilename);
exit(0);
}
/*输出要加密的文件*/
printf("\nThe the text of file to be encrypted is:\n");
OutputFile(sfp);
/*建立加密后的文件*/
if((dfp=fopen(dfilename,"w+"))==0)
{
printf("Can't open or create the file :%s\n",dfilename);
//exit(0);
}
/*文件加密*/
fseek(sfp,0L,SEEK_SET);
EncryptFile(sfp,dfp,pwd);
printf("\n\nEncrypted the file successfully!\n");
/*输出加密后的文件*/
printf("\nAfter encrypting the text of file is:\n");
fseek(dfp,0L,SEEK_SET);
OutputFile(dfp);
fclose(sfp);
fclose(dfp);
getch();
return 0;
}

❸ 明文密文问题(C语言编程

#include<stdio.h>

#include<stdlib.h>

voidjam();//声明加密函数

voidjem();//声明解密函数

charmw[80],yw[80];//存放原文或密文的数组

voidmain()

{charF;

do{

system("CLS");

printf("请选择: ");

printf("1、加密 ");

printf("2、解密 ");

printf("0、退出 ");

scanf("%c",&F);

getchar();

switch(F)

{case'1':

jam();

case'2':

jem();}

}while(F!='0');

}

voidjem()//解密函数

{intj,n;

printf("请输入密文: ");

gets(mw);

printf("密文是%s ",mw);

j=0;

do//每循环处理一个字符

{

if(mw[j]>='A'&&mw[j]<='Z')

{n=mw[j]-64-13;//原文大写字符在字母表中位置

yw[j]=n<=0?'Z'+n:n%26+64;}//原文大写字符

elseif(mw[j]>='a'&&mw[j]<='z')

{n=mw[j]-96-13;//原文小写字符在字母表中位置

yw[j]=n<=0?'z'+n:n%26+96;}//原文小写字符

else

yw[j]=mw[j];//忽略非字母

j++;

}while(mw[j]!='');

yw[j]=mw[j];

printf("原文是%s ",yw);

getchar();}

voidjam()//加密函数

{intj,n;

printf("请输入原文: ");

gets(mw);

printf("原文是%s ",mw);

j=0;

do//每循环处理一个字符

{

if(mw[j]>='A'&&mw[j]<='Z')

{n=(mw[j]-64+13)%26;//密文大写字符在字母表中位置

yw[j]=(n==0?'Z':(n+64));}//密文大写字符

elseif(mw[j]>='a'&&mw[j]<='z')

{n=(mw[j]-96+13)%26;//密文小写字符在字母表中位置

yw[j]=(n==0?'z':(n+96));}//密文小写字符

else

yw[j]=mw[j];//忽略非字母

j++;

}while(mw[j]!='');

yw[j]=mw[j];

printf("密文是%s ",yw);

getchar();}

/*说明:

1、菜单调用加密或解密函数

2、加密时,逐个加密mw数组中字母,忽略非字母

3、解密时,逐个解密数组mw中字母,忽略非字母

4、加密算法是把原字符ascii码+13,解密算法是把密字符ascii码-13,但必须考虑模

运行效果如下图*/

❹ 关于C语言中加密解密的问题!!!!!!!

fseek(fp,0,SEEK_END); //将位置指针移到文件末尾 SEEK_END是宏定义
//表示文件尾
int len=ftell(fp); // ftell()函数可以得到
//文件当前位置相对于文件首的偏移字节数 .
//在这也就是得到了文件的长度。
pBuf=new char[len+1]; //分配文件长度+1个字符的空间
rewind(fp); //位置指针回到文件首部
fread(pBuf,1,len,fp); //将文件内容读入到刚才分配的Buffer中
pBuf[len]=0; //buffer的最后一位置为0 即'\0'
//表示字符串的结束
printf("%s\n",pBuf); //打印出buffer内容 即文件内容
fclose(fp); // 关闭文件指针
printf("请输入加密/解密的密码:\n");
scanf("%s",key); //终端输入加密或解密的密码
sc(pBuf,key,len,strlen(key)); //进行加密/解密 输入pBuf 加密/解密后文本仍
//放在pBuf中
printf("请输入保存加密文件的文件名:\n");
scanf("%s",filename); //终端输入加密/解密后保存的文件名
if((fp=fopen(filename,"wb"))==NULL) //创建该文件
{printf("无法保存文件,请注意磁盘是否已满!\n");
exit(0); }
else
fwrite(pBuf,1,len,fp); //将加密/解密后文本写到文件中
fclose(fp); //关闭文件

void sc(char *fp,char *key,int Flen,int Klen)//是一个加密/解密函数
{int i,j,k;
for(i=0;i<Flen;i+=Klen)
for(j=i,k=0;k<Klen;j++,k++)
fp[j]^=key[k];fp[i]='\0';printf("%s\n",fp);}

❺ C语言的文本文档怎么加密

简单一点的加密可以把文件按字或者字节取出,然后跟一个事先约定好的数进行异或
这里利用的是异或运算的一个性质:
如果A异或B=C
那么C异或B=A
就是说异或加密以后要解密的话只要将加密后的文档按照原来加密的方法再异或一次就解密了
你可以试试

再提供一个简单加密的方法:按字节取出以后循环左移/右移,解密的时候相反操作

高级一点的加密就要用到专门的加密算法了,比如RSA之类。

❻ c语言 数据加密

  1. 什么是异或算法

  2. 异或的特点是原始值经过两次异或某一个数后会变成原来的值,所以有时利用这个特性来进行加密,加密端把数据与一个密钥进行异或操作,生成密文。接收方收到密文后利用加密方提供的密钥进行再次异或操作就能得到明文。

例程:

/*以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语言如何进行字符加密

进行字符加密是很多种的。
数据加密的基本过程就是对原来为明文的文件或数据按某种算法进行处理,使其成为不可读的一段代码为“密文”,使其只能在输入相应的密钥之后才能显示出原容,通过这样的途径来达到保护数据不被非法人窃取、阅读的目的。 该过程的逆过程为解密,即将该编码信息转化为其原来数据的过程。

❽ C语言怎么加密字符

#include<stdio.h>
#include<string.h>
intmain()
{
charstr[]="00000",str2[]="00000",*p=str,*p2=str2;
printf("输入5个字母:");
while(*p!=0)
{
scanf("%c",p);
if(*p==' ')
continue;
if(*p<'A'||(*p>'Z'&&*p<'a')||*p>'z')//输入验证,必须是字母
{
printf("只能输入字母,请重新输入 ");
p=str;
p2=str2;
fflush(stdin);//输入有错重新输入前清空缓冲区。fflush属于c扩展函数,正常使用没问题,如需在linuxggc上使用,考虑多次调用getchar函数来清空
}
else
{
*p2=(*p)+4;
if(*p2>90&&*p2<97)//大写字母加4,最大位不超出
*p2='A'+(*p2-90)-1;
if(*p2>122)//小写字母加4,最大位不超出
*p2='a'+(*p2-122)-1;
p2++;
p++;
}
}

printf("原字符串为:%s 加密后的字符串为:%s ",str,str2);
return0;
}

阅读全文

与c语言中明文暗文加密注意什么相关的资料

热点内容
php开发客户端 浏览:996
theisle测试服怎么搜服务器 浏览:445
广播PDF 浏览:216
单片机编程300例汇编百度 浏览:33
腾讯云连接不上服务器 浏览:221
不能用来表示算法的是 浏览:859
6轴机器人算法 浏览:890
手机主题照片在哪个文件夹 浏览:294
安卓手机后期用什么软件调色 浏览:628
cad修改快捷键的命令 浏览:242
好钱包app怎么登录不了 浏览:859
树莓派都用python不用c 浏览:757
access文件夹树的构造 浏览:662
安卓多指操作怎么设置 浏览:658
linux树形目录 浏览:727
平方根的简单算法 浏览:898
千牛订单页面信息加密取消 浏览:558
单片机自制红外遥控灯 浏览:719
服务器最小配置怎么弄 浏览:853
ibm服务器硬件如何升级 浏览:923