c语言加密解密算法

c语言加密解密算法,第1张

这里使用的是按位加密,按ASCII码进行加密的算法自己写个,很容易的。

#include<stdioh>

#include<stdlibh>

#include<conioh>

#include<stringh>

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>=j0j=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

file1txt

12345678

file2txt\n",name);

}

通常加密解密都是采用异或运算

例如:

char c = 'A';

c ^= (char)7; // 加密, 此时c的值是'F'

c ^= (char)7; // 解密, 此时c的值是'A'

这个只是一个简单的例子, 密钥是7, 你可以进行多次异或运算来提高算法难度

我已经在另一个问题中回答了

>

这样就可以了

#include<stdioh>

voidcode(charp,intkey)

{

while(p!='\0')

{

p=97+(p-97+key)%26;

p++;

}

}

voiduncode(charp,intkey)

{

while(p!='\0')

{

p=97+(p-71-key)%26;

p++;

}

}

main()

{

charstr[100];

intn,key;

printf("输入密匙:");

scanf("%d",&key);

printf("输入1加密,输入2解密:");

scanf("%d",&n);

printf("输入字符串:");

scanf("%s",str);

if(n==1)

{

code(str,key);

printf("密文为%s\n",str);

}

elseif(n==2)

{

uncode(str,key);

printf("原文为%s\n",str);

}

}

在下面程序的基础上改写一下算法。

#include<stdioh>

#include<stdlibh>

#include<stringh>

void encfile(char in_filename,char pwd,char out_filename);/对文件进行加密的具体函数/

int main(int argc,char argv[])/定义main()函数的命令行参数/

{

char in_filename[30];/用户输入的要加密的文件名/

char out_filename[30]; /用户输入加密后保存的文件名/

char pwd[8];/用来保存密码/

if(argc!=4){/容错处理/

printf("\nPlease input In-filename:\n");

gets(in_filename);/得到要加密的文件名/

printf("Please input your Password:\n");

gets(pwd);/得到密码/

printf("Please input Out-filename:\n");

gets(out_filename);/得到加密后你要的文件名/

encfile(in_filename,pwd,out_filename);/函数调用/

}

else{/如果命令行参数正确,便直接运行程序/

strcpy(in_filename,argv[1]);

strcpy(pwd,argv[2]);

strcpy(out_filename,argv[3]);

encfile(in_filename,pwd,out_filename);

}

system("pause");

return 0;

}

/加密子函数开始/

void encfile(char in_filename,char pwd,char out_file)

{

FILE fp1,fp2;

register char ch;

int j=0;

int j0=0;

fp1=fopen(in_filename,"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>=j0j=0:j++],fp2);/异或后写入fp2文件/

ch=fgetc(fp1);

}

fclose(fp1);/关闭源文件/

fclose(fp2);/关闭目标文件/

}

直接对字符串按字符加减密钥的位数就可以了。

#include

<iostreamh>

#define

MAX

1000

//加密

char

Encryption(char

E,int

Key)

{

for(int

i=0;(E+i);i++)

{

(E+i)

+=

Key;

if((E+i)>'z')

(E+i)

-=

('z'-'a')+1;

}

return

E;

}

//解密

char

Decryption(char

E,int

Key)

{

for(int

i=0;(E+i);i++)

{

(E+i)

-=

Key;

if((E+i)<'a')

(E+i)

+=

('z'-'a')+1;

}

return

E;

}

void

main()

{

char

a[MAX];

int

key;

cout<<"输入字符串:"<<endl;

cin

>>

a;

cout<<"输入密钥:"<<endl;

cin

>>key;

cout<<"加密输出:"<<Encryption(a,key)<<endl;

cout<<"解密输出:"<<Decryption(a,key)<<endl;

}

以上就是关于c语言加密解密算法全部的内容,包括:c语言加密解密算法、c#中如何完成一个字符加密解密程序(如A加密后为F)、跪求c语言编程问题文件移位加密与解密急!等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zz/9317243.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-27
下一篇 2023-04-27

发表评论

登录后才能评论

评论列表(0条)

保存