当前位置: 首页 > news >正文

Linux下在终端输入密码隐藏方法

Linux系统中,如何将在终端输入密码时将密码隐藏?

最近做简单的登录界面时,不做任何操作的话,在终端输入密码的同时也会显示输入的密码是什么,这样对于隐蔽性和使用都有不好的体验。那么我就想到将密码用字符'*'隐藏起来,这样看起来才像一个完整的登录界面。

当然,使用QT做登录界面隐藏密码就没有这么麻烦,在本文中,仅作为乐趣供读者参考。

1. 首先来看看实现效果是怎么样的:

 在该程序中,我输入了密码是123456,它在输入的同时也将密码用星号'*'代替了,密码也不会丢失,仍然保存在数组中,所以第二行就能完整显示密码。

2. 实现分析

实现隐藏密码的方法就两个过程。第一,使自己在终端输入的字符不显示;第二,在终端上同步输入星号'*'。在终端上输入等量的星号'*'并不难,但是我们要同时让,自己在键盘上输入的字符不显示在终端上,那么,如何让自己输入的字符不显示在终端上,也能存入内存中呢?我们需要禁用回显和行缓冲。

回显:使键盘输入的字符立即显示到终端上;行缓冲:使输入的数据存储到缓冲区中,直到用户输入回车键后才会被传递给程序。这意味着在输入密码时,密码会被暂时存储在缓冲区中,可能会被其他程序截获。禁用行缓冲模式可以避免密码被截获。

3. 函数介绍

经过上述的分析,接下来介绍一个函数,来实现上述的要求。

头文件:

#include <termios.h>

该头文件定义了一个termios结构体,可以使用tcgetattrtcsetattr函数来获取和设置终端属性。通过设置终端的输入模式,可以实现在输入密码时用星号代替。

禁用回显和行缓冲的代码演示:

    // 禁用终端回显和行缓冲struct termios old_term, new_term;tcgetattr(STDIN_FILENO, &old_term); // 获取当前终端属性,存储到old_term中new_term = old_term;new_term.c_lflag &= ~(ECHO | ICANON); // 禁用回显和行缓冲两个属性tcsetattr(STDIN_FILENO, TCSANOW, &new_term);
  1. 先定义两个结构体,分别代表两种模式。
  2. 使用tcgetattr函数获取当前属性,以保证可以回到旧属性。
  3. 赋值
  4. 将新属性中的回显和行缓冲两个属性禁用,ECHO表示是否回显输入字符,ICANON表示是否启用行缓冲模式。
  5. 使用tcsetattr函数使用新属性,TCSANOW参数表示立即生效。

在4中,(ECHO | ICANON)表示将ECHO和ICANON标志位置反,即将它们的值从1变为0,再使用&运算符将new_term.c_lflag中的ECHO和ICANON标志位设置为0,而保留其他标志位的值不变。

这样就实现了在键盘上输入但不显示到终端的方法。

4. 输入星号'*'

	while((ch = getchar()) != '\n' && i < MAX) {pwd[i++] = ch;printf("*");}

每读取一个字符,都会输出一个星号'*',保证了星号和键盘输入同步进行。

5. 完整代码

#include <stdio.h>
#include <termios.h>
#include <unistd.h>#define MAX 20int main(void)
{char pwd[MAX+1];int i = 0;char ch;// 禁用终端回显和行缓冲struct termios old_term, new_term;tcgetattr(STDIN_FILENO, &old_term);new_term = old_term;new_term.c_lflag &= ~(ECHO | ICANON); // 禁用回显和行缓冲两个属性tcsetattr(STDIN_FILENO, TCSANOW, &new_term);printf("Enter password : ");while((ch = getchar()) != '\n' && i < MAX) {pwd[i++] = ch;printf("*");}pwd[i] = '\0';printf("\nYour password is %s\n", pwd);// 恢复终端属性tcsetattr(STDIN_FILENO, TCSANOW,&old_term);return 0;
}

相关文章:

Linux下在终端输入密码隐藏方法

Linux系统中&#xff0c;如何将在终端输入密码时将密码隐藏&#xff1f; 最近做简单的登录界面时&#xff0c;不做任何操作的话&#xff0c;在终端输入密码的同时也会显示输入的密码是什么&#xff0c;这样对于隐蔽性和使用都有不好的体验。那么我就想到将密码用字符*隐藏起来…...

【ARM 常见汇编指令学习 3 -- ARM64 无符号位域提取指令 UBFX】

文章目录 ARM64 无符号位域提取指令 上篇文章&#xff1a;ARM 常见汇编指令学习 2 – 存储指令 STP 与 LDP 下篇文章&#xff1a;ARM 常见汇编指令学习 4 – ARM64 比较指令 cbnz 与 b.ne 区别 ARM64 无符号位域提取指令 在代码中如何监控寄存器的某1bit&#xff0c; 或者某几…...

求分享如何批量压缩视频的容量的方法

视频内存过大&#xff0c;不但特别占内存&#xff0c;而且还会使手机电脑出现卡顿的现象&#xff0c;除此之外&#xff0c;如果我们想发送这些视频文件可能还会因为内存太大无法发送。因此&#xff0c;我们可以批量地压缩视频文件的内存大小&#xff0c;今天小编要来分享一招&a…...

ChatGPT 是如何工作的:从预训练到 RLHF

欢迎来到人工智能的未来&#xff1a;生成式人工智能&#xff01;您是否想知道机器如何学习理解人类语言并做出相应的反应&#xff1f;让我们来看看ChatGPT ——OpenAI 开发的革命性语言模型。凭借其突破性的 GPT-3.5 架构&#xff0c;ChatGPT 席卷了世界&#xff0c;改变了我们…...

KafKa脚本操作

所有操作位于/usr/local/kafka_2.12-3.5.1/bin。 rootubuntu2203:/usr/local/kafka_2.12-3.5.1/bin# pwd /usr/local/kafka_2.12-3.5.1/bin rootubuntu2203:/usr/local/kafka_2.12-3.5.1/bin# ls connect-distributed.sh kafka-delegation-tokens.sh kafka-mirror-mak…...

【自动化运维】playbook剧本

目录 一、Ansible 的脚本 playbook 剧本1.1playbooks的组成 二、剧本编写实验2.1定义、引用变量2.2使用远程主机sudo切换用户2.3whenn条件判断2.4迭代 三、Templates 模板四、Tags模板 一、Ansible 的脚本 playbook 剧本 1.1playbooks的组成 &#xff08;1&#xff09;Tasks&…...

java中双引号和单引号的区别

起因 刷题的时候&#xff0c;有判断是否相同的情况&#xff0c;然后我发现单引号和双引号在上的表现不一样&#xff0c;所以记录一下。 解释 在Java中&#xff0c;双引号&#xff08;" "&#xff09;和单引号&#xff08;’ &#xff09;在使用上有很重要的区别&a…...

jenkinsfile指定jenkins流水线的构建号

背景 升级Jenkins过程中不小心导致流水线配置文件job目录丢失, 重新配置流水线后所有流水线构建号码都从1开始构建了, 然而我们的产品关联了jenkins构建号,重新从1 构建会导致各种问题. 解决方案 在Jenkinsfile文件中指定流水线的构建号为一个不存在的数字, 这样就不会冲突了…...

微信小程序:实现提示窗确定,取消执行不同操作(消息提示确认取消)showModal

效果 代码 wx.showModal({title: 提示,content: 是否确认退出,success: function (res) {if (res.confirm) {console.log(用户点击确定)} else if (res.cancel) {console.log(用户点击取消)}}})...

深度学习论文: Q-YOLO: Efficient Inference for Real-time Object Detection及其PyTorch实现

深度学习论文: Q-YOLO: Efficient Inference for Real-time Object Detection及其PyTorch实现 Q-YOLO: Efficient Inference for Real-time Object Detection PDF: https://arxiv.org/pdf/2307.04816.pdf PyTorch代码: https://github.com/shanglianlm0525/CvPytorch PyTorch代…...

解读随机森林的决策树:揭示模型背后的奥秘

一、引言 随机森林[1]是一种强大的机器学习算法&#xff0c;在许多领域都取得了显著的成功。它由多个决策树组成&#xff0c;而决策树则是构建随机森林的基本组件之一。通过深入解析决策树&#xff0c;我们可以更好地理解随机森林模型的工作原理和内在机制。 决策树是一种树状结…...

OceanMind海睿思获评中国信通院“内审数字化产品评测”卓越级(最高级)!

2023年7月27日&#xff0c;由中国内部审计协会、中国通信标准化协会指导&#xff0c;中国信息通信研究院主办的第二届数字化审计论坛在北京成功召开。 大会聚焦内部审计数字化领域先进实践、研究成果、行业发展举措&#xff0c;重磅发布了多项内部审计数字化领域的最新研究和实…...

TPlink云路由器界面端口映射设置方法?快解析内网穿透能实现吗?

有很多网友在问&#xff1a;TPlink路由器端口映射怎么设置&#xff1f;因为不懂端口映射的原理&#xff0c;所以无从下手&#xff0c;下面小编就给大家分享TPlink云路由器界面端口映射设置方法&#xff0c;帮助大家快速入门TP路由器端口映射设置方法。 1.登录路由器管理界面&a…...

css3的filter图片滤镜使用

业务介绍 默认&#xff1a;第一个图标为选中状态&#xff0c;其他三个图标事未选中状态 样式&#xff1a;选中状态是深蓝&#xff0c;未选中状体是浅蓝 交互&#xff1a;鼠标放上去选中&#xff0c;其他未选中&#xff0c;鼠标离开时候保持当前选中状态 实现&#xff1a;目前…...

❤️创意网页:打造炫酷网页 - 旋转彩虹背景中的星星动画

✨博主&#xff1a;命运之光 &#x1f338;专栏&#xff1a;Python星辰秘典 &#x1f433;专栏&#xff1a;web开发&#xff08;简单好用又好看&#xff09; ❤️专栏&#xff1a;Java经典程序设计 ☀️博主的其他文章&#xff1a;点击进入博主的主页 前言&#xff1a;欢迎踏入…...

react常用知识点

React是一个用于构建用户界面的JavaScript库。以下是React常用的知识点&#xff1a; 组件&#xff1a;React将用户界面分解成小而独立的组件&#xff0c;每个组件都有自己的状态和属性&#xff0c;并且可以通过组合这些组件来构建复杂的用户界面。 // 函数组件示例 function We…...

iOS开发-QLPreviewController与UIDocumentInteractionController显示文档

iOS开发-QLPreviewController与UIDocumentInteractionController显示文档 在应用中,我们有时想预览文件, 可以使用QLPreviewController与UIDocumentInteractionController 一、QLPreviewController与UIDocumentInteractionController QLPreviewController是一个 UIViewContr…...

八、用 ChatGPT 帮助排查生产事故

目录 一、实验介绍 二、背景 三、故障排查概述 3.1 生产环境故障排查涉及的角色...

WPF实战学习笔记25-首页汇总

注意&#xff1a;本实现与视频不一致。本实现中单独做了汇总接口&#xff0c;而视频中则合并到国todo接口当中了。 添加汇总webapi接口添加汇总数据客户端接口总数据客户端接口对接3首页数据模型 添加数据汇总字段类 新建文件MyToDo.Share.Models.SummaryDto using System;…...

FreeRTOS源码分析-7 消息队列

目录 1 消息队列的概念和作用 2 应用 2.1功能需求 2.2接口函数API 2.3 功能实现 3 消息队列源码分析 3.1消息队列控制块 3.2消息队列创建 3.3消息队列删除 3.4消息队列在任务中发送 3.5消息队列在中断中发送 3.6消息队列在任务中接收 3.7消息队列在中断中接收 1 消…...

机器学习深度学习——权重衰减

&#x1f468;‍&#x1f393;作者简介&#xff1a;一位即将上大四&#xff0c;正专攻机器学习的保研er &#x1f30c;上期文章&#xff1a;机器学习&&深度学习——模型选择、欠拟合和过拟合 &#x1f4da;订阅专栏&#xff1a;机器学习&&深度学习 希望文章对你…...

【Linux】线程互斥 -- 互斥锁 | 死锁 | 线程安全

引入互斥初识锁互斥量mutex锁原理解析 可重入VS线程安全STL中的容器是否是线程安全的? 死锁 引入 我们写一个多线程同时访问一个全局变量的情况(抢票系统)&#xff0c;看看会出什么bug&#xff1a; // 共享资源&#xff0c; 火车票 int tickets 10000; //新线程执行方法 vo…...

【vue-pdf】PDF文件预览插件

1 插件安装 npm install vue-pdf vue-pdf GitHub&#xff1a;https://github.com/FranckFreiburger/vue-pdf#readme 参考文档&#xff1a;https://www.cnblogs.com/steamed-twisted-roll/p/9648255.html catch报错&#xff1a;vue-pdf组件报错vue-pdf Cannot read properti…...

Flink集群运行模式--Standalone运行模式

Flink集群运行模式--Standalone运行模式 一、实验目的二、实验内容三、实验原理四、实验环境五、实验步骤5.1 部署模式5.1.1 会话模式&#xff08;Session Mode&#xff09;5.1.2 单作业模式&#xff08;Per-Job Mode&#xff09;5.1.3 应用模式&#xff08;Application Mode&a…...

Spring整合JUnit实现单元测试

Spring整合JUnit实现单元测试 一、引言 在软件开发过程中&#xff0c;单元测试是保证代码质量和稳定性的重要手段。JUnit是一个流行的Java单元测试框架&#xff0c;而Spring是一个广泛应用于Java企业级开发的框架。本文将介绍如何使用Spring整合JUnit实现单元测试&#xff0c…...

Spring Boot学习路线1

Spring Boot是什么&#xff1f; Spring Boot是基于Spring Framework构建应用程序的框架&#xff0c;Spring Framework是一个广泛使用的用于构建基于Java的企业应用程序的开源框架。Spring Boot旨在使创建独立的、生产级别的Spring应用程序变得容易&#xff0c;您可以"只是…...

管理类联考——写作——论说文——实战篇——标题篇

角度3——4种材料类型、4个立意对象、5种写作态度 经过审题立意后&#xff0c;我们要根据我们的立意&#xff0c;确定一个主题&#xff0c;这个主题必须通过文章的标题直接表达出来。 标题的基本要求 主题清晰&#xff0c;态度明确 第一&#xff0c;阅卷人看到一篇论说文的标…...

idea中设置maven本地仓库和自动下载依赖jar包

1.下载maven 地址&#xff1a;maven3.6.3 解压缩在D:\apache-maven-3.6.3-bin\apache-maven-3.6.3\目录下新建文件夹repository打开apache-maven-3.6.3-bin\apache-maven-3.6.3\conf文件中的settings.xml编辑&#xff1a;新增本地仓库路径 <localRepository>D:\apache-…...

前缀和差分

前缀和 前缀和&#xff1a;一段序列里的前n项和 给出n个数&#xff0c;在给出q次问询&#xff0c;每次问询给出L、R&#xff0c;快速求出每组数组中一段L至R区间的和 给出一段数组&#xff0c;每次问询为求出l到r区间的和 普通方法&#xff1a;L到R进行遍历&#xff0c;那么…...

Golang GORM 模型定义

模型定义 参考文档&#xff1a;https://gorm.io/zh_CN/docs/models.html 模型一般都是普通的 Golang 的结构体&#xff0c;Go的基本数据类型&#xff0c;或者指针。 模型是标准的struct,由Go的基本数据类型、实现了Scanner和Valuer接口的自定义类型及其指针或别名组成&#x…...

wordpress建立数据库连接时出错/网站推广软件免费

在 Linux 中使用 vim 时&#xff0c;输入 vim xxx.file 输入好文件内容之后&#xff0c;怎么保存呢&#xff1f; 按 ESC&#xff0c;左下角就可以进行输入 :w 保存但不退出 :wq 保存并退出 :q 退出 :q! 强制退出&#xff0c;不保存 :e! 放弃所有修改&#xff0c;从上次保存文件…...

建设公司网站的步骤/排名优化网站seo排名

首先介绍算法思路&#xff1a;图像对应方向的投影&#xff0c;就是在该方向取一条直线&#xff0c;统计垂直于该直线(轴)的图像上的像素的黑点数量&#xff0c;累加求和作为该轴该位置的值&#xff1b;基于图像投影的切割就是将图像映射成这种特征后&#xff0c;基于这种特征判…...

网站的缺点/网站关键词有哪些

编译环境&#xff1a;Unity2018 作者&#xff1a;代码骑士 邮箱&#xff1a;1696297834qq.com 最后修改时间&#xff1a;2022/2/26 一、游戏演示 &#xff08;文件mp4转gif格式原因&#xff0c;图片显示比较卡顿&#xff0c;非游戏正常帧数&#xff09; 二、基本流程 1、游戏开…...

微信上做网站/免费产品推广网站

&#xff11;&#xff0e;程序结构采用主程序和中断服务子程序结构&#xff12;&#xff0e;定时中断程序&#xff0c;并行口输出&#xff0c;控制彩灯移动定时器0于方式1&#xff0c;16位&#xff0c;10ms中断一次40H10ms计数单元41H初值为01101101B位地址00H1定时方式1为10MS…...

做垂直平台网站/公司企业网站建设

今天我在设置cookie的时候&#xff0c;发现cookie的值获取有问题 问题代码 //创建cookie,将当前的时间作为cookie的值发送给客户端String currentTimenew SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());Cookie cookienew Cookie("lastAccess&quo…...

改网站标题快照倒退怎么解决/网络营销模式有哪些类型

2019独角兽企业重金招聘Python工程师标准>>> 一次一密密码&#xff08;one-time pad&#xff09;最早是由Major Joseph Mauborgne和AT&T公司的Gilbert Vernam在1917年发明的。原理简单&#xff0c;使用便捷&#xff0c;其安全原理是基于信息传递&#xff0c;双方…...