当前位置:首页 » 编程语言 » c语言用最少步数解开密码
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

c语言用最少步数解开密码

发布时间: 2023-06-26 00:08:56

1. 一个两位纯数字密码破解程序怎么编,用c语言

1、数据范围小的密码可以使用穷举法。这里从00到99,当作字符来处理,需要两重循环。

2、例程:

chara,b,c='1',d='2';//这里变量c,d表示密码的第一位和第二位。
charkey[2];
for(a='0';a<='9';a++){
for(b='0';b<='9';b++){
key[0]=a;
key[1]=b;//这就是一个密码
if(key[0]==c&&key[1]==d)printf("密码是:%s",key);//找到密码并输出
}
}

2. 如何用C语言实现加强版的凯撒密码破解!

供参考 译码只需要一句即可

感兴趣自己分析下

#include<stdio.h>
intmain()
{
chars[100];
intk;
inti;
while(~scanf("%s%d",s,&k))
{
k%=26;
for(i=0;s[i];i++)
s[i]=(s[i]-'A'+26-(k+i+1)%26)%26+'A';
printf("%s ",s);
}
return0;
}

3. 用c语言设计一个简单地加密算,解密算法,并说明其中的原理

恰巧这两天刚看的一种思路,很简单的加密解密算法,我说一下吧。
算法原理很简单,假设你的原密码是A,用A与数B按位异或后得到C,C就是加密后的密码,用C再与数B按位异或后能得回A。即(A异或B)异或B=A。用C实现很简单的。
这就相当于,你用原密码A和特定数字B产生加密密码C,别人拿到这个加密的密码C,如果不知道特定的数字B,他是无法解密得到原密码A的。
对于密码是数字的情况可以用下面的代码:
#include <stdio.h>
#define BIRTHDAY 19880314
int main()
{
long a, b;

scanf("%ld", &a);
printf("原密码:%ld\n", a);
b = BIRTHDAY;
a ^= b;
printf("加密密码:%ld\n", a);

a ^= b; printf("解密密码:%ld\n", a);
return 0;
}
如果密码是字符串的话,最简单的加密算法就是对每个字符重新映射,只要加密解密双方共同遵守同一个映射规则就行啦。

4. C语言简单密码破解(密文转明文)

调了半天,楼主真是太粗心了!middle1[]应该这样声明:
char
middle1[]={'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'};
最后输出start的时候要注意控制长度,改个for循环就好了!
#include<stdio.h>
#include<string.h>
int
main(void)
{
int
i,j,length,n;
char
temp;
char
middle2[27];
char
start[201],finish[201];
char
middle1[]={'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'};
gets(middle2);
gets(finish);
scanf("%d",&n);
length=strlen(finish);
for(i=0;i<25;i++)
{
for(j=i+1;j<26;j++)
{
if(middle2[i]>middle2[j])
{
temp=middle2[i];
middle2[i]=middle2[j];
middle2[j]=temp;
temp=middle1[i];
middle1[i]=middle1[j];
middle1[j]=temp;
}
}
}
for(i=1;i<=n;i++)
{
for(j=0;j<length;j++)
{
if(finish[j]=='
')
{
start[j]='
';
}
else
{
start[j]=middle1[finish[j]-'A'];
}
}
}
for(
i
=
0;i
<
length;++i)
printf("%c",start[i]);
printf("\
");
return
0;
}
/*
ABCDEFGHIJKLMNOPQRSTUVWXYZ
*/

5. 用C语言设计一个加密 解密 密码 的程序。

// playFair 加密 你参考下 ...
#include"stdio.h"
#include"string.h"
#include"stdlib.h"
#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;
}
/*一对中 密钥矩阵中 存在矩阵 eg.ab 先输出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;
}

6. c语言根据条件解锁3位密码锁

根据你的代码修改,正确的逻辑如下:
#include<stdio.h>

int check1(int i,int j,int k)
{
if(i==2&&j!=4&&k!=6) return 1;
if(i!=2&&j==4&&k!=6) return 1;
if(i!=2&&j!=4&&k==6) return 1;
return 0;
}

int check2(int i,int j,int k)
{
if((i==5||i==8)&&j!=2&&j!=5&&j!=8&&k!=2&&k!=5&&k!=8) return 1;
if((j==2||j==8)&&i!=2&&i!=5&&i!=8&&k!=2&&k!=5&&k!=8) return 1;
if((k==2||k==5)&&i!=2&&i!=5&&i!=8&&j!=2&&j!=5&&j!=8) return 1;
return 0;
}

int check3(int i,int j,int k)
{
if(i==9&&(j==6||j==2)&&k!=6&&k!=9&&k!=2) return 1;
if(i==2&&j==6&&k!=6&&k!=9&&k!=2) return 1;
if(k==6&&(i==9||i==2)&&j!=6&&j!=9&&j!=2) return 1;
if(k==9&&i==2&&j!=6&&j!=9&&j!=2) return 1;
return 0;
}

int check4(int i,int j,int k)
{
if(i!=1&&i!=7&&i!=4&&j!=1&&j!=7&&j!=4&&k!=1&&k!=7&&k!=4)
{
return 1;
}
return 0;
}

int check5(int i,int j,int k)
{
if((i==1||i==9)&&j!=4&&j!=1&&j!=9&&k!=4&&k!=1&&k!=9) return 1;
if((j==4||j==9)&&i!=4&&i!=1&&i!=9&&k!=4&&k!=1&&k!=9) return 1;
if((k==4||k==1)&&i!=4&&i!=1&&i!=9&&j!=4&&j!=1&&j!=9) return 1;
return 0;
}

int main()
{
int i,j,k;
for(i=0;i<10;i++)
for(j=0;j<10;j++)
for(k=0;k<10;k++)
{
if(check1(i,j,k))
{
if(check2(i,j,k))
{
if(check3(i,j,k))
{
if(check4(i,j,k))
{
if(check5(i,j,k))
{
printf("%d%d%d\n",i,j,k);
}
}
}
}
}
}
}