Linux C 实现密码的密文输入,*输出,可删除

window情况下可以使用getch()函数(不回显),然后再用printf或是putchar函数输出*用以模仿输入*

但由于该函数包含在 <conio.h>头文件下,而在linux、Unix环境下往往不包含此头文件

这里可以考虑使用函数

getpass("")

来实现无回显输入

举例

while(ch_password= '\n')  //无回显,然后将getpass返回的数组函数复制到自己的密码数组中
{
	 ch_password=getpass("Input a password");
	 strcpy(msg.password,ch_password);
		
}

但不会输出*,也无法删除

 如果想以***代替密码,并且具有删除功能怎么办呢

这里再介绍两个linux 系统函数

 

system("stty -icanon");                   //设置一次性读完操作,即getchar()不用回车也能获取字符
system("stty -echo");                     //关闭回显,即输入任何字符都不显示

 那么上述功能便容易实现了

void handle_password(char *password) //一维数组指针
{
	int i=0;
	system("stty -icanon"); //设置一次性读完操作,即getchar()不用回车也能获取字符
	system("stty -echo");   //关闭回显,即输入任何字符都不显示

	while(i < 20)  //20假设密码长度不超过20
	{
		password[i]=getchar();                    //获取键盘的值到数组中
		if(i == 0 && password[i] == BACKSPACE)
		{
			i=0;                           //空密码情况
			pass[i]='\0';
			continue;
		}
		else if(password[i] == BACKSPACE)
		{
			printf("\b \b");            //删除情况,光标前移
			password[i]='\0';
			i=i-1;                    //返回到前一个值继续输入
			continue;                 //结束当前循环
		}
		else if(password[i] == '\n')          //回车键结束
		{
			password[i]='\0';
			break;
		}
		else
		{
			printf("*");
		}
		i++;
	}

	system("stty echo");               //开启回显
	system("stty icanon");           //关闭一次性读完操作
	
}

 

C语言是一种通用的高级程序设计语言,可以用于编写各种应用程序,包括操作系统。以下是你所要求的加密解密代码: ```c #include <stdio.h> #include <string.h> void encrypt(char *str, char key); void decrypt(char *str, char key); int main() { int option; char str[100]; char key; printf("请选择操作:\n"); printf("1. 加密\n"); printf("2. 解密\n"); scanf("%d", &option); if (option == 1) { printf("请输入:"); scanf("%s", str); printf("请输入秘钥:"); scanf(" %c", &key); encrypt(str, key); printf("加密后的密文为:%s\n", str); } else if (option == 2) { printf("请输入密文:"); scanf("%s", str); printf("请输入秘钥:"); scanf(" %c", &key); decrypt(str, key); printf("解密后的明为:%s\n", str); } else { printf("无效的选项\n"); } return 0; } void encrypt(char *str, char key) { int i; int len = strlen(str); for (i = 0; i < len; i++) { str[i] ^= key; } } void decrypt(char *str, char key) { encrypt(str, key); } ``` 这段代码实现了加密和解密的功能。加密过程是将明中每个字符与秘钥进行异或运算,得到相应的密文;解密过程则是将密文再次进行异或运算,得到原始的明。在这段代码中,我们使用了两个函数来实现加密和解密,这样可以避免代码重复。在加密函数中,我们使用了循环来遍历字符串中的每一个字符,并对其进行异或运算;在解密函数中,我们直接调用加密函数即可。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

身在江湖的郭大侠

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值