
// playFair 加密 你参考下
#include"stdioh"
#include"stringh"
#include"stdlibh"
#define x 50
char MiYao[x],PassWord[x],AddPass[x],Table[5][5],Map[25];
bool Visit[27]={false};
char English[27]="abcdefghijklmnopqrstuvwxyz";
void Input()
{
printf("请输入密钥:\t"); scanf("%s",MiYao);
printf("请输入待加密密码:\t"); scanf("%s",PassWord);
}
void Fun_5x5()
{
int count = 0,V =0;
/标记密钥内字符为: true/
for(int i=0;MiYao[i]!='\0';i++)
if(strchr(English,MiYao[i])!=NULL)
Visit[strchr(English,MiYao[i])-English] = true;
/执行密钥矩阵 *** 作 并标记已使用字符:true/
for(int i=0;i<5;i++)
for(int j=0;j<5;j++)
{
if(count<strlen(MiYao))
Table[i][j] = MiYao[count++];
else
{
while(Visit[V] != false) V++;
Table[i][j] = English[V];
Visit[V++] = true;
}
}
puts("∞∞∞密钥矩阵为∞∞∞");
for(int i=0;i<5;i++)
{ for(int j=0;j<5;j++)
printf("%3c",Table[i][j]);
puts("");
}
puts("∞∞∞∞∞∞∞∞∞∞∞");
}
int IsVisited(char ch)
{
return Visit[strchr(English,ch)-English]; //false 未出现过
}
void TabletoMap()
{ int count=0;
for(int i=0;i<5;i++)
for(int j=0;j<5;j++)
Map[count++]=Table[i][j];
Map[count]='\0';
}
void Judge()
{
int len = strlen(PassWord),i,j,k;
memset(AddPass,0,sizeof(char));
/一对对去字母,剩下单个字母,则不变化,直接放入加密串中/
if(len%2){
AddPass[len-1] = PassWord[len-1];
len -=1;
}
/一对中 密钥矩阵中 存在矩阵 egab 先输出a同行顶点在输出b同行顶点/
int row1,low1,row2,low2,a1,a2;
for(i=0;i<len;i+=2)
{
char c1,c2;
c1 = PassWord[i];
c2 = PassWord[i+1];
/一对中 两字母相同 无变化/
/一对中 有字母不在密钥矩阵中 无变化/
if(c1 == c2 || ( !IsVisited(c1)||!IsVisited(c2)))
{ AddPass[i] = c1;
AddPass[i+1]=c2;
}else{
a1 = strchr(Map,c1)-Map;
row1 = a1/5; low1 = a1%5;
a2 = strchr(Map,c2)-Map;
row2 = a2/5; low2 = a2%5;
/一对中 字符出现在同行或同列 简单swap字符/
if(row1 == row2 || low1 == low2)
{
AddPass[i] = c2;
AddPass[i+1] = c1;
}else{
AddPass[i] = Table[row1][low2];
AddPass[i+1] = Table[row2][low1];
}
}
}AddPass[len+1]='\0';
puts("加密后字符串:");
puts(AddPass);
puts("原串是:");
puts(PassWord);
}
int main()
{
Input();
Fun_5x5();
TabletoMap();
Judge();
return 0;
}
给你一个加密算法 我写的 用异或算法处理文本类的文档
#include<stdioh>
#include<conioh>
#include<stdlibh>
#include<timeh>
jiemi()
{
int k,l;
char FN[40],FS[40];
char ch,mima[40],x;
FILE f1,f2;
printf("输入要解密的文件夹名称:");
scanf("%s",FN);
if((f1=fopen(FN,"r"))==NULL)
{
printf("您的路径有误,系统将不能完成任务,请重新进入。");
getch();
exit(1);
}
printf("输入您要解密到的文件夹名称:");
scanf("%s",FS);
if((f2=fopen(FS,"w"))==NULL)
{
printf("您的输入有误,系统将不能完成任务,请重新进入。");
getch();
exit(1);
}
printf("输入密码:");
scanf("%s",mima);
l=strlen(mima);
k=0;
ch=fgetc(f1);
while(ch!=EOF)
{
k=k%l;
fputc(ch^mima[k],f2);
ch=fgetc(f1);
k++;
}
fclose(f1);
fclose(f2);
printf("解密成功,请在该软件目录找到您解密的文件。\n");
getch();
}
jiami()
{
int k,l;
char FN[20],FS[20];
char ch,mima[40],x;
FILE f1,f2;
printf("输入要打开的文件夹名称:");
scanf("%s",FN);
if((f1=fopen(FN,"r"))==NULL)
{
printf("您的路径有误,系统将不能完成任务,请重新进入。");
getch();
exit(1);
}
printf("输入要保存的文件夹名称:");
scanf("%s",FS);
if((f2=fopen(FS,"w"))==NULL)
{
printf("您的输入有误,系统将不能完成任务,请重新进入。");
getch();
exit(1);
}
printf("输入密码:");
scanf("%s",mima);
l=strlen(mima);
k=0;
ch=fgetc(f1);
while(ch!=EOF) //文件没有到底就继续 ,EOF文件的底部
{
k=k%l;
fputc(ch^mima[k],f2);
ch=fgetc(f1);
k++;
}
fclose(f1);
fclose(f2);
printf("加密成功,请在该软件目录找到您加密的文件。\n");
getch();
}
main()
{
char y;
while(1)
{
printf("说明:欢迎使用文件加密程序,该程序可以将txt文档加密为为不可读文件,解密后返回原状态\n\n");
printf("小提示:输入文件名字的时候请使用字母,数字或下划线。\n并且请加上(文件名)txt的后缀,要加密的文件请放在和程序文件同目录下\n\n");
printf(" 菜单\n");
printf(" 1加密 \n");
printf(" 2解密 \n");
printf(" 0退出 \n");
printf(" \n");
printf(" 请输入要执行的命令:\n");
y=getch();
switch(y)
{
case '1': jiami();system("cls");break;
case '2': jiemi();system("cls");break;
case '0': exit(0);
}
}
}
您说的这个方法,我没有 *** 作过。
给文件加密,我使用的是超级加密3000
超级加密3000采用国际上成熟的加密算法和安全快速的加密方法,可以有效保障数据安全!
具体 *** 作方法:
1 下载安装超级加密3000。
2 然后在需要加密的文件上单击鼠标右键选择加密。
3 在d出的文件加密窗口中设置文件加密密码就OK了。
#include <stdioh>
#define isletter( c ) ( ((c)>='a'&&(c)<='z') || ((c)>='A'&&(c)<='Z') )
void Enc( const char str, char out, int key )
{
int i = 0;
while( str[i] )
{
if ( isletter( str[i] ) )
{
out[i] = str[i] + key;
if ( ! isletter( out[i]) )
out[i] -= 26;
}
else
out[i] = str[i];
i++;
}
out[i] = 0;
}
void Denc( const char str, char out, int key )
{
int i=0;
while( str[i] )
{
if ( isletter( str[i] ) )
{
out[i] = str[i] - key;
if ( ! isletter( out[i] ) )
out[i] += 26;
}
else
out[i] = str[i];
i++;
}
out[i] = 0;
}
int main()
{
char out[100], out2[100];
Enc( "THE QUICK BROWn fox jumps over THE LAZY DOG", out, 3 );
printf( "%s\n", out );
Denc( out, out2, 3 );
printf( "%s\n", out2 );
}
以上就是关于用C语言设计一个加密 解密 密码 的程序。全部的内容,包括:用C语言设计一个加密 解密 密码 的程序。、用C语言乘法加密怎么解密(对文本文件内容乘法加密的。怎么解密比如加密钥匙为K=2。原内容X2.)、用C语言编写文件移位加密与解密程序,如加密:设原文为abcdef,密钥为5,则有abcdef每个字母按字母表向后等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)