// 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;i5;i++)
for(int j=0;j5;j++)
{
if(countstrlen(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;i5;i++)
{ for(int j=0;j5;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;i5;i++)
for(int j=0;j5;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;ilen;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 stdio.h
#include conio.h /*conio库,调用无回显getch()就是输入后不显示*/
void main ()
{
int i=1;
int j;
char code[10];
for(;i=3;i++)
{
printf("你还有%d次机会,请输入密码:\n",4-i);
for(j=0;j10;j++)
{
code[j]=getch();
if(code[j]=='\b') /* 遇到退格键可以删除前一个输入*/
{
printf("\b \b");
code[--j]=0;
}
else
printf("*"); /*输入的信息将以*号输出*/
if(code[j]=='\r')/*遇到回车程序跳出*/
break;
}
if(code[0]=='1'code[1]=='2'code[2]=='3')/*密码是123*/
{
printf("\nright\n");
break;
}
else
printf("\nwrong\n");
if(i==4)
{
printf("你的机会已用尽");
break;
}
}
}
楼主,我已经修改了,如果还有什么问题,可以继续HI我
一个思路:
1) 使用SetWindowsHookEx(),注册keyboard hook和mouse hook;注意,在hook中,一定要调用之前返回的函数
2)一旦hook函数被调用,则重启定时器。
3)定时器超时,则调用LockWorkStation()锁屏