当前位置:首页 » 编程语言 » c语言解密

c语言解密

发布时间: 2022-10-23 17:28:20

‘壹’ c语言设计一个简单的加密解密程序

C语言设计一个简单的加密解密程序如下:
加密程序代码:
#include

main()
{
char
c,filename[20];
FILE
*fp1,*fp2;
printf("请输入待加密的文件名:\n");
scanf("%s",filename);
fp1=fopen(filename,"r");
fp2=fopen("miwen.txt","w");
do
{
c=fgetc(fp1);
if(c>=32&&c<=126)
{
c=c-32;
c=126-c;
}
if(c!=-1)
fprintf(fp2,"%c",c);
}
while(c!=-1);
}
解密程序代码:
#include

#include

main()
{
char
c,filename[20];
char
yanzhengma[20];
FILE
*fp1,*fp2;
printf("请输入待解密文件名:\n");
scanf("%s",filename);
printf("请输入验证码:\n");
scanf("%s",yanzhengma);
if(strcmp(yanzhengma,"shan")==0)
{
fp1=fopen(filename,"r");
fp2=fopen("yuanwen.txt","w");
do
{
c=fgetc(fp1);
if(c>=32&&c<=126)
{
c=126-c;
c=32+c;
}
if(c!=-1)
fprintf(fp2,"%c",c);
}
while(c!=-1);
}
else
{
printf("验证码错误!请重新输入:\n");
scanf("%s",filename);
}
}

‘贰’ 用C语言实现文件的加密与解密的思路是什么

设置加密算法,如将文件以二进制打开,每个字节加(或减、乘、除、模等等)一个数,设置类似的一个加密算法。将该文件重新生成一次。完成加密过程。解密过程既是对加密过程的逆运算,保证将没个字节还原成为文件原貌即可。另外,不一定针对每个字节进行运算,加密的字节仍然可以通过算法确定,例如,奇数字节、偶数字节等进行加密操作。

‘叁’ c语言文件加密和解密

c语言文件加密和解密方法如下:

1、首先打开VC++6.0;

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语言 文件加密解密

根据你的需要,修改了之前的代码。

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<time.h>

constunsignedintMAX_KEY_LENGTH=1000;

intencode(charconst*datafile,charconst*keyfill);
intdecode(charconst*datafile,charconst*keyfile);
intloadKey(charconst*keyfile,int*keys,unsignedintsize);
intsaveKey(charconst*keyfile,int*keys,unsignedintsize);
intgenerateKey(int*keys,unsignedintsize);

intmain(intargc,charconst*argv[])
{
chardatafile[]="encrypted.txt";
charkeyfile[]="key.txt";
intretcode,choice,loop=1;
charch[5]={''};

while(1)
{
printf("1.Encryption. ");
printf("2.Decryption. ");
printf("3.Exit. ");
printf("Selection(1,2,3):");
fgets(ch,sizeof(ch),stdin);
sscanf(ch,"%d",&choice);
switch(choice)
{
case1:
retcode=encode(datafile,keyfile);
if(retcode!=0)printf("error,%d",retcode);
break;

case2:
retcode=decode(datafile,keyfile);
if(retcode!=0)printf("error,%d",retcode);
break;

case3:
loop=0;
break;
default:
;
break;
}
if(0==loop)break;
}
return0;
}


intgenerateKey(int*keys,unsignedintsize)
{
charstr[]=",./;"'<>?";
size_tstr_len=sizeof(str)/sizeof(str[0]);
inti;

srand(time(NULL));
for(i=0;i<size;++i)
keys[i]=str[rand()%str_len];

return0;
}

intloadKey(charconst*keyfile,int*keys,unsignedintsize)
{
inti=0;
FILE*pfile;
intretcode=0;

pfile=fopen(keyfile,"r");
if(pfile==NULL)return-1;

while(!feof(pfile)){
if(i<size)
fscanf(pfile,"%d",&keys[i++]);
else
break;
}
fclose(pfile);
returni;
}

intsaveKey(charconst*keyfile,int*keys,unsignedintsize)
{
FILE*pfile;
inti;

pfile=fopen(keyfile,"w");
if(pfile==NULL)return-1;

for(i=0;i<size;++i){
fprintf(pfile,"%d",keys[i]);
}
fclose(pfile);
return0;
}

intencode(charconst*datafile,charconst*keyfile)
{
charoriginal[MAX_KEY_LENGTH]={''};
charencrypted[MAX_KEY_LENGTH]={''};
inti,size;
intkeys[MAX_KEY_LENGTH];
FILE*pdatafile,*pkeyfile;

pkeyfile=fopen(keyfile,"w");
if(NULL==pkeyfile)return-1;
fclose(pkeyfile);

puts("inputmessage:");
gets(original);
size=strlen(original);
if(0!=generateKey(keys,size))return-2;
if(0!=saveKey(keyfile,keys,size))return-3;

pdatafile=fopen(datafile,"w");
if(NULL==pdatafile)return-4;

for(i=0;i<size;++i){
encrypted[i]=original[i]+keys[i];
fputc(encrypted[i],pdatafile);
fputc(encrypted[i],stdout);
}
printf(" ");
fclose(pdatafile);
return0;
}

intdecode(charconst*datafile,charconst*keyfile)
{
FILE*pdatafile,*pkeyfile;
intkeys[MAX_KEY_LENGTH]={0};
charoriginal[MAX_KEY_LENGTH]={''};
charencrypted[MAX_KEY_LENGTH]={''};
inti,size;

pkeyfile=fopen(keyfile,"r");
if(NULL==pkeyfile)return-1;
fclose(pkeyfile);
pdatafile=fopen(datafile,"r");
if(NULL==pdatafile)return-2;

fscanf(pdatafile,"%s",encrypted);
fclose(pdatafile);

size=loadKey(keyfile,keys,MAX_KEY_LENGTH);
if(size<1)return-3;

for(i=0;i<strlen(encrypted);++i){
original[i]=encrypted[i]-keys[i];
fputc(original[i],stdout);
}
printf(" ");
return0;
}

运行结果:

1. Encryption.
2. Decryption.
3. Exit.
Selection (1,2,3):1
input message:
this is A test!
╓┐»╞Lñ╗ù|t▄╬╢╒è
1. Encryption.
2. Decryption.
3. Exit.
Selection (1,2,3):2
this is A test!
1. Encryption.
2. Decryption.
3. Exit.
Selection (1,2,3):3

‘伍’ C语言设计一个简单的加密解密程序

C语言设计一个简单的加密解密程序如下:
加密程序代码:
#include<stdio.h>
main()
{
char
c,filename[20];
FILE
*fp1,*fp2;
printf("请输入待加密的文件名:\n");
scanf("%s",filename);
fp1=fopen(filename,"r");
fp2=fopen("miwen.txt","w");
do
{
c=fgetc(fp1);
if(c>=32&&c<=126)
{
c=c-32;
c=126-c;
}
if(c!=-1)
fprintf(fp2,"%c",c);
}
while(c!=-1);
}
解密程序代码:
#include<stdio.h>
#include<string.h>
main()
{
char
c,filename[20];
char
yanzhengma[20];
FILE
*fp1,*fp2;
printf("请输入待解密文件名:\n");
scanf("%s",filename);
printf("请输入验证码:\n");
scanf("%s",yanzhengma);
if(strcmp(yanzhengma,"shan")==0)
{
fp1=fopen(filename,"r");
fp2=fopen("yuanwen.txt","w");
do
{
c=fgetc(fp1);
if(c>=32&&c<=126)
{
c=126-c;
c=32+c;
}
if(c!=-1)
fprintf(fp2,"%c",c);
}
while(c!=-1);
}
else
{
printf("验证码错误!请重新输入:\n");
scanf("%s",filename);
}
}

‘陆’ c语言加密解密算法

这里使用的是按位加密,按ASCII码进行加密的算法自己写个,很容易的。
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<string.h>
void
dofile(char
*in_fname,char
*pwd,char
*out_fname);/*对文件进行加密的具体函数*/
void
usage(char
*name);
void
main(int
argc,char
*argv[])/*定义main()函数的命令行参数*/
{
char
in_fname[30];/*用户输入的要加密的文件名*/
char
out_fname[30];
char
pwd[10];/*用来保存密码*/
if(argc!=4)
{/*容错处理*/
usage(argv[0]);
printf("\nIn-fname:\n");
gets(in_fname);/*得到要加密的文件名*/
while(*in_fname==NULL)
{
printf("\nIn-fname:\n");
gets(in_fname);
}
printf("Password
6-8:\n");
gets(pwd);/*得到密码*/
while(*pwd==NULL
||
strlen(pwd)>8
||
strlen(pwd)<6)
{
printf("Password
6-8:\n");
gets(pwd);
}
printf("Out-file:\n");
gets(out_fname);/*得到加密后你要的文件名*/
while(*in_fname==NULL)
{
printf("Out-file:\n");
gets(out_fname);
}
while(!strcmp(in_fname,out_fname))
{
printf("文件名不能和源文件相同\n");
printf("Out-file:\n");
gets(out_fname);
}
dofile(in_fname,pwd,out_fname);
printf("加密成功,解密请再次运行程序\n");
}
else
{/*如果命令行参数正确,便直接运行程序*/
strcpy(in_fname,argv[1]);
strcpy(pwd,argv[2]);
strcpy(out_fname,argv[3]);
while(*pwd==NULL
||
strlen(pwd)>8
||
strlen(pwd)<6)
{
printf("Password
faied!\n");
printf("Password
6-8:\n");
gets(pwd);
}
while(!strcmp(in_fname,out_fname))
{
printf("文件名不能和源文件相同\n");
printf("Out-file:\n");
gets(out_fname);
while(*in_fname==NULL)
{
printf("Out-file:\n");
gets(out_fname);
}
}
dofile(in_fname,pwd,out_fname);
printf("加密成功,解密请再次运行程序\n");
}
}
/*加密子函数开始*/
void
dofile(char
*in_fname,char
*pwd,char
*out_file)
{
FILE
*fp1,*fp2;
register
char
ch;
int
j=0;
int
j0=strlen(pwd);
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(j0>=0)
{
ch=fgetc(fp1);
while(!feof(fp1))
{
fputc(ch^pwd[j>=j0?j=0:j++],fp2);/*异或后写入fp2文件*/
ch=fgetc(fp1);
}
j0--;
}
fclose(fp1);/*关闭源文件*/
fclose(fp2);/*关闭目标文件*/
}
void
usage(char
*name)
{
printf("\t=======================File
encryption======================\n");
printf("\tusage:
%s
In-fname
password
out_fname\n",name);
printf("\tExample:
%s
file1.txt
12345678
file2.txt\n",name);
}

‘柒’ C语言 解密

#include<stdio.h>
#include<string.h>
main()
{chars[100][1000],a[100][500];
inti,j,n,m1,m2,l,b[100][500];
while(1){
scanf("%d",&n);
getchar();
for(i=0;i<n;i++)
gets(s[i]);
for(i=0;i<n;i++){
l=strlen(s[i]);
for(j=0;j<l;j+=2){
if(s[i][j]<='9')
m1=s[i][j]-'0';
else
m1=s[i][j]-'A'+10;
if(s[i][j+1]<='9')
m2=s[i][j+1]-'0';
else
m2=s[i][j+1]-'A'+10;
b[i][j/2]=m1*16+m2;
if(b[i][j/2]<26)a[i][j/2]=b[i][j/2]+'A';
if(b[i][j/2]>25&&b[i][j/2]<52)a[i][j/2]=b[i][j/2]-26+'a';
if(b[i][j/2]==95)a[i][j/2]='_';
if(b[i][j/2]==59)a[i][j/2]=';';
}
}
printf(" ");
for(i=0;i<n;i++)printf("%s ",a[i]);
}
}

如图所示,望采纳。。。。。。

‘捌’ RSA加密解密算法示例(C语言)

#include <stdlib.h>

#include <stdio.h>

#include <string.h>

#include <math.h>

#include <time.h>

#define PRIME_MAX 200   // 生成素数范围

#define EXPONENT_MAX 200 // 生成指数e范围

#define Element_Max 127    // 加密单元的最大值,这里为一个char, 即1Byte

char str_read[100]="hello world !";  // 待加密的原文

int str_encrypt[100];                // 加密后的内容

char str_decrypt[100];              // 解密出来的内容

int str_read_len;                    // str_read 的长度

int prime1, prime2;                  // 随机生成的两个质数

int mod, eular;                      // 模数和欧拉数

int pubKey, priKey;                  // 公钥指数和私钥指数

// 生成随机素数,实际应用中,这两个质数越大,就越难破解。

int randPrime()

{

int prime, prime2, i;

next:

prime = rand() % PRIME_MAX;   // 随机产生数

if (prime <= 1) goto next;      // 不是质数,生成下一个随机数

if (prime == 2 || prime == 3) return prime;

prime2 = prime / 2;              // prime>=4, prime2 的平方必定大于 prime , 因此只检查小于等于prime2的数

for (i = 2; i <= prime2; i++)   // 判断是否为素数

{

if (i * i > prime) return prime;

if (prime % i == 0) goto next;  // 不是质数,生成下一个随机数

}

}

// 欧几里德算法,判断a,b互质

int gcd(int a, int b)

{

int temp;

while (b != 0) {

temp = b;

b = a % b;

a = temp;

}

return a;

}

//生成公钥指数,条件是 1< e < 欧拉数,且与欧拉数互质。

int randExponent()

{

int e;

while (1)

{

e = rand() % eular; if (e < EXPONENT_MAX) break;

}

while (1)

{

if (gcd(e, eular) == 1) return e; e = (e + 1) % eular; if (e == 0 || e > EXPONENT_MAX) e = 2;

}

}

//生成私钥指数

int inverse()

{

int d, x;

while (1)

{

d = rand() % eular;

x = pubKey * d % eular;

if (x == 1)

{

return d;

}

}

}

//加密函数

void jiami()           

{

str_read_len = strlen(str_read);      //从参数表示的地址往后找,找到第一个'\0',即串尾。计算'\0'至首地址的“距离”,即隔了几个字符,从而得出长度。

printf("密文是:");

for (int i = 0; i < str_read_len; i++)

{

int C = 1; int a = str_read[i], b = a % mod;

for (int j = 0; j < pubKey; j++) //实现加密

{

C = (C*b) % mod;

}

str_encrypt[i] = C;

printf("%d ", str_encrypt[i]);

}

printf("\n");

}

//解密函数

void jiemi()         

{

int i=0;  for (i = 0; i < str_read_len; i++)

{

int C = 1; int a = str_encrypt[i], b=a%mod;

for (int j = 0; j < priKey; j++)

{

C = (C * b) % mod;

}

str_decrypt[i] = C;

}

str_decrypt[i] = '\0'; printf("解密文是:%s \n", str_decrypt);

}

int main()

{

srand(time(NULL));

while (1)

{

prime1 = randPrime(); prime2 = randPrime(); printf("随机产生两个素数:prime1 = %d , prime2 = %d ", prime1, prime2);

mod = prime1 * prime2; printf("模数:mod = prime1 * prime2 = %d \n", mod); if (mod > Element_Max) break; // 模数要大于每个加密单元的值

}

eular = (prime1 - 1) * (prime2 - 1);  printf("欧拉数:eular=(prime1-1)*(prime2-1) = %d \n", eular);

pubKey = randExponent(); printf("公钥指数:pubKey = %d\n", pubKey);

priKey = inverse(); printf("私钥指数:priKey = %d\n私钥为 (%d, %d)\n", priKey, priKey, mod);

jiami(); jiemi();

return 0;

}

‘玖’ C语言 文件加密解密

文件中啊!(C)
首先file1中存一些信息(直接在文件中手写或者通过源程序从屏幕中读取)
大致过程{
fp1 = fopen("file1", "w");//write
scanf("%c", &ch1);//用while循环多次写入
fprintf(fp1, "%c", ch1);
}
第二:从文件中读取内容,和0x6a异或

fp2 = fopen ("file1", "r")//read
fp3 = fopen ("file2", "w")//write

fscanf(fp2, "%c", &ch2);//用while循环多次读出
异或操作,结果赋给ch3;
printf("%c", ch );//屏幕显示
fprintf(fp3, "%c", ch3);//写入file2中

第三:读出file2的内容
fp3 = fopen ("file2", "r")//read

fscanf(fp3, "%c", &ch4);//用while循环多次读出
printf(“%c”, ch );

大概过程就是这样,文件主要是自己写才能掌握,这里就不把代码给你了。
上面的部分代码给你参考一下。有问题欢迎询问
源程序只是负责操作;file1和file2是存放数据的文件,可以看成结构体。
文件操作好好学,很重要!

‘拾’ 如何用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");
}

热点内容
办一个论坛需要租什么样的服务器 发布:2024-12-29 14:44:21 浏览:959
java开闭原则 发布:2024-12-29 14:43:36 浏览:917
多端数据统一存储 发布:2024-12-29 14:41:16 浏览:91
如何破解蓝奏云下载密码 发布:2024-12-29 14:40:08 浏览:740
9500h如何查安卓版本 发布:2024-12-29 14:39:15 浏览:803
如何不使用信用卡支付密码 发布:2024-12-29 14:30:36 浏览:198
安卓手机如何到数据到新手机 发布:2024-12-29 14:29:58 浏览:961
linux卸载虚拟机 发布:2024-12-29 14:29:48 浏览:39
乐视手机配置为什么这么便宜 发布:2024-12-29 14:19:05 浏览:694
androidicon生成 发布:2024-12-29 14:11:47 浏览:936