c语言,密码生成器
/******************************************************密码生成器
要求: 实现下面两个功能
1)输入原文译成密码
2)输入密码译成原文
规律:A-->e,a-->e,..W-->A,w-->a,..Z-->D,z-->d
缺点:两个英文字符之间不要用空格隔开用-
******************************************************/
#include<stdio.h>
void encryption(char c[]);//加密
void decipher(char c[]);//破译
void main()
{
int j=0;
char c;
while(1)
{
printf("输入0退出,输入1选择加密,输入2选择破译:\n");
scanf("%d",&j);
if(!j)break;
else if(1==j||2==j)
{
if(1==j)
{
printf("请输入要加密的字符串:\n");
scanf("%s",&c);
encryption(c);//加密
}
if(2==j)
{
printf("请输入要破译的字符串:\n");
scanf("%s",&c);
decipher(c);//破译
}
}
else
{
printf("输入错误,请重新输入:\n");
}
}
}
void decipher(char c[])//破译
{
int i=0;
while(c!='\0')
{
if( (c >= 'A' && c <= 'D')||(c >= 'a' && c <= 'd') )
{
c=c+22;
}
if( ( c >= 'E' && c <= 'Z') || ( c >= 'e' && c <= 'z') )
{
c=c-4;
}
i++;
}
printf("破译后为:%s\n",c);
}
void encryption(char c[])//加密
{
int i=0;
while(c!='\0')
{
if( (c >= 'W' && c <= 'Z')||(c >= 'w' && c <= 'z') )
{
c=c-22;
}
if( ( c >= 'A' && c <= 'V') || ( c >= 'a' && c <= 'v') )
{
c=c+4;
}
i++;
}
printf("加密后为:%s\n",c);
}
本帖最后由 jackz007 于 2020-3-12 10:46 编辑
#include <stdio.h>
char encrypt(char c)
{
if(c >= 'A' && c <= 'Z') c = (c - 'A' + 4) % 26 + 'A' ;
else if(c >= 'a' && c <= 'z') c = (c - 'a' + 4) % 26 + 'a' ;
return c ;
}
char decrypt(char c)
{
if(c >= 'A' && c <= 'Z') c = (c - 'A' + 22) % 26 + 'A' ;
else if(c >= 'a' && c <= 'z') c = (c - 'a' + 22) % 26 + 'a' ;
return c ;
}
main(void)
{
char c , s ;
int k , m ;
for(m = 0 ; (c = getchar()) != '\n' ; s = c , s = '\0') ;
for(k = 0 ; k < m ; k ++ , s = '\0' , s = '\0') {
s = encrypt(s) ;
s = decrypt(s) ;
}
printf("您输入的明文是【%s】\n" , s) ;
printf("您得到的密文是【%s】\n" , s) ;
printf("您得到的明文是【%s】\n" , s) ;
}
编译、运行实况:
C:\Bin>mw
Hello , World !
您输入的明文是【Hello , World !】
您得到的密文是【Lipps , Asvph !】
您得到的明文是【Hello , World !】
C:\Bin>
页:
[1]