Linux C:如何隐藏密码输入的星号? (linux c 密码 星号)

在开发 Linux 应用程序时,常常需要读取用户输入的密码。通常情况下,我们往往会使用 Linux 系统提供的 getch() 函数来读取用户输入的字符,但是这种方式在输入密码时会暴露用户的密码,不仅不安全,并且用户的输入也不够隐私。为了保障用户的密码安全,本文将介绍如何隐藏密码输入的星号。

1. 读取密码的函数

在 Linux C 开发中,我们通常会使用 GCC 来编写代码,在读取密码的过程中,我们可以使用 termios.h 头文件中的属性,而在 Ubuntu 14.04 安装包中,它已经默认集成,因此我们可以直接使用该头文件中的函数实现密码的读取,代码如下:

“`

#include

#include

#include

#include

int getch(void)

{

struct termios tm, tm_old;

int fd = STDIN_FILENO, c;

if (tcgetattr(fd, &tm)

return -1;

}

tm_old = tm;

cfmakeraw(&tm);

if (tcsetattr(fd, TCSANOW, &tm)

return -1;

}

c = getchar();

if (tcsetattr(fd, TCSANOW, &tm_old)

return -1;

}

return c;

}

void getpassword(char *password,int size)

{

int i = 0, ch;

while ((ch = getch()) != ‘\n’)

{

if(ch != ‘\t’ && ch != ‘\b’ && i

{

putchar(‘*’);

*(password + i++) = ch;

}

else if(ch == ‘\b’ && i > 0)

{

putchar(‘\b’);

putchar(‘ ‘);

putchar(‘\b’);

i–;

}

}

*(password + i) = ‘\0’;

}

“`

在代码中,getch() 函数是读取字符的函数,其中使用了 Linux 的 terminals 模块来获得输入字符,这个结构体包含了一系列的常量,如带宽速率、奇偶检验、流控制和硬件控制。通过设备文件文件描述符 fd(设置为 STDIN)来获取终端的属性,然后把该函数阻塞并打开,使用 cfmakeraw(&tm) 设置它为非规范模式,使得输入输出数据直接发送和接收,就像开发实时应用程序一样。最后返回读取到的字符。

getpassword() 函数通过 getche() 函数来避免了明文输入密码的情况,并在每一次输入完一个字符之后输出一个星号,从而避免了明文显示密码的情况。

2. 调用函数实现密码输入

在我们完成上述的代码之后,我们可以使用它来进行密码的输入,然后将其发送到服务器。代码如下:

“`

int mn()

{

char password[10];

printf(“Please enter password: “);

getpassword(password,10);

printf(“\nYour password is %s “, password);

return 0;

}

“`

在代码中,我们可以看到,首先像命令行提示用户输入密码,然后通过调用 getpassword() 函数来读取和隐藏密码,并最后输出结果。

3.

相关问题拓展阅读:

c语言编写的程序,在输入密码时,如何加密?

加密和解密算法是程序编制中的重要一环。试想,如果我们平时使用的腾讯QQ、支付宝支付密码、今日头条账号密码那么轻易就被别人盗取的话,很多不可以预料的事情就会发生!

在现实生活中,我们遇到过太多QQ密码被盗取的前空情况,有的朋友QQ被盗之后,骗子利用朋友间信任骗取钱财埋厅的事情屡见不鲜。支付宝也曾出现过支付宝账户被恶意盗取的事件,对用户利益造成了严重损害!这些在技慧液瞎术上都指向了同一相关问题:软件加密算法的强壮程度。今天,小编利用C语言来简单实现一种加密方法。下面是源代码。

需要说明:程序利用了ascii码值的按照一定规律变换实现加密,对于解密过程,则是加密的逆过程。下面是程序的运行结果。

4190阅读

搜索

编程免费课程300节

初学编程100个代码

java自学一般要学多久

5秒破解excel密码

python必背100源代码

40岁零基础学编程

前言:当今社会是一个信息社会,你的个人信息和聊天记录极有可能被别有用心的人时时刻刻监视着,那么你想不想实现专属于两个人或一个小圈子的人在社交软件上的交流不被任何其他人读懂呢?

下面就给棚颂团大家提供一个原理极其简单程序极其容易实现的C语言文字加密小程序的实现算法。

在键盘上录入了”今天晚上我不回家吃饭了”,将这串字符的ASCLL码全部加1,打印出来是这样的”掘晚晤市嫌臣假接凑负绿”。怎么样,哈哈哈,是不是看完后丈二和尚摸不着头脑?

所以,用这种算法实现对汉字的加密和翻译绝对隐蔽!汉字在计算机中的编码比较复杂,一个汉字在Windows 10系统下的CodeBlocks编译器里占2个字符的位置,我记得我有做过樱友测试,在Cent OS Linux系统下占3个字符的位置。

然而不管一个汉字占几个字符的位置,对每个字符的ASCLL码做加减乘除的运算和逆运算就可以实现对文字的加密和翻译。

下面向大家展示一下源代码(加密算法为将所有字符的ASCLL码加1,翻译算法为将所链橘有字符的ASCLL码减1):

头文件部分:

主函数部分:

下面向大家展示一下加密与翻译的效果:

思考与提高:仅仅将所有字符的ASCLL码加1就实现对文字信息的加密了,会不会很容易被破译呢?请恕我不是密码学专家,这一点我无法回答,但是直观感觉这样加密确实有点简单。

那么我们就可以对字符进行多种更为复杂的处理,比如给所有字符加上一个正负变换的数列、给所有字符加上斐波那契数列等。总之,直观感觉就是越复杂越不容易被破译。

下面向大家展示一下给所有字符加上一个正负变换的数列的加密算法的源代码:

头文件部分:

主函数部分主要是用来调试的,与上面那个简单加密算法的主函数部分相同。

下面向大家展示一下使用这种复杂加密算法加密与翻译的效果:

用了加密程序后,画风是这样的:

#include “stdio.h”

#include “

conio.h

int main()

{

 char tmpc;

 int i = 0;

 tmpc = ‘ ‘; 

 

 简改斗printf(“input password:\n”);

 for(i = 0; i 山简

#include

void main()

{

char c;

while(1)

{

c=getch();

if(c==’\r’) break;

printf(“卖尺*”);

}

}

#include void main() { char str,*p=str; gets(str); while(*p) { if(*p>=’a’ && *p=’a’ && *p

Linux中什么是密码占位符

举几个例子,你就明白了:

1、“#”:数字占位符。只显有意义的零而不显示无意义的零。小数点后数字如大于”#”的数中运量,则按”#”的位数四舍五入。

例:代码:”###.##”,12.1显示为12.10;12.1263显示为:12.13

2、”0”:数字占位符。如果单元格的内容大于占位符,则显示实际数字,如果小于点位符的数量,则用0补足。

例:代码:”00000”。显示为;123显示为00123

代码:”00.000”。消培橘100.14显示为100.140;1.1显示为01.100

3、”@”:文本占位符,如果只使用单个@,作用拿团是引用原始文本,

要在输入数字数据之后自动添加文本,使用自定义格式为:”文本内容”@;要在输入数字数据之前自动添加文本,使用自定义格式为:@”文本内容”。@符号的位置决定了Excel输入的数字数据相对于添加文本的位置。

如果使用多个@,则可以重复文本。

星号

linux c 密码 星号的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于linux c 密码 星号,Linux C:如何隐藏密码输入的星号?,c语言编写的程序,在输入密码时,如何加密?,Linux中什么是密码占位符的信息别忘了在本站进行查找喔。


数据运维技术 » Linux C:如何隐藏密码输入的星号? (linux c 密码 星号)