Python中输入密码总是可见?那是你没使用过这个模块

Python中多种生成随机密码超实用实例_python的random模块随机生成密码 本人从事网路安全工作12年,曾在2个大厂工作过,安全服务、售后服务、售前、攻防比赛、安全讲师、销售经理等职位都做过,对这个行业了解比较全面。最近遍览了各种网络安全类的文章,内容参差不齐,其中不伐有大佬倾力教学,也有各种不良机构浑水摸鱼,在收到几条私信,发现大家对一套完整的系统的网络安全从学习路线到学习资料,甚至是工具有着不小的需求。最后,我将这部分内容融会贯通成了一套282G的网络安全资料包,所有类目条理清晰,知识点层层递进,需要的小伙伴可以点击下方小卡片领取哦! 阅读详情

用 GPG 和 Python 的 getpass 模块给你的密码多一层安全保障。

密码对程序员来说尤其重要。你不应该在不加密的情况下存储它们,而且你也不应该在用户输入密码的时候显示出输入的内容。当我决定要提高我的笔记本电脑的安全性时,这对我来说变得特别重要。我对我的家目录进行了加密,但当我登录后,任何以纯文本形式存储在配置文件中的密码都有可能暴露在偷窥者面前。

具体来说,我使用一个名为 Mutt 的应用作为我的电子邮件客户端。它可以让我在我的 Linux 终端中阅读和撰写电子邮件,但通常它希望在其配置文件中有一个密码。我限制了我的 Mutt 配置文件的权限,以便只有我可以看到它,我是我的笔记本电脑的唯一用户,所以我并不真的担心经过认证的用户会无意中看到我的配置文件。相反,我想保护自己,无论是为了吹嘘还是为了版本控制,不至于心不在焉地把我的配置发布到网上,把我的密码暴露了。此外,虽然我不希望我的系统上有不受欢迎的客人,但我确实想确保入侵者不能通过对我的配置上运行 cat 就获得我的密码。

Python GnuPG

Python 模块 python-gnupg 是 gpg 应用的一个 Python 封装。该模块的名字是 python-gnupg ,你不要把它和一个叫做 gnupg 的模块混淆。

GnuPG (GPG) 是 Linux 的默认加密系统,我从 2009 年左右开始使用它。我对它很熟悉,对它的安全性有很高的信任。

我决定将我的密码输入 Mutt 的最好方法是将我的密码存储在一个加密的 GPG 文件中,创建一个提示我的 GPG 密码来解锁这个加密文件,然后将密码交给 Mutt(实际上是交给 offlineimap 命令,我用它来同步我的笔记本和电子邮件服务器)。

用 Python 获取用户输入 是非常容易的。对 input 进行调用,无论用户输入什么,都会被存储为一个变量:

print("Enter password: ")
myinput = input()

print("You entered: ", myinput)

我的问题是,当我根据密码提示在终端上输入密码时,我所输入的所有内容对任何从我肩膀上看过去或滚动我的终端历史的人来说都是可见的:

$ ./test.py
Enter password: my-Complex-Passphrase

用 getpass 输入不可见密码

正如通常的情况一样,有一个 Python 模块已经解决了我的问题。这个模块是 getpass4 ,从用户的角度来看,它的行为和 input 完全一样,只是不显示用户输入的内容。

你可以用 pip 安装这两个模块:

$ python -m pip install --user python-gnupg getpass4

下面是我的 Python 脚本,用于创建密码提示:

#!/usr/bin/env python
# by Seth Kenlon
# GPLv3

# install deps:
# python3 -m pip install --user python-gnupg getpass4

import gnupg
import getpass
from pathlib import Path

def get_api_pass():
  homedir = str(Path.home())
  gpg = gnupg.GPG(gnupghome=os.path.join(homedir,".gnupg"), use_agent=True)
  passwd = getpass.getpass(prompt="Enter your GnuPG password: ", stream=None)

  with open(os.path.join(homedir,'.mutt','pass.gpg'), 'rb') as f:
    apipass = (gpg.decrypt_file(f, passphrase=passwd))

  f.close()

  return str(apipass)
 
if __name__ == "__main__":
  apipass = get_api_pass()
  print(apipass)

如果你想试试,把文件保存为 password_prompt.py 。如果你使用 offlineimap 并想在你自己的密码输入中使用这个方案,那么把它保存到某个你可以在 .offlineimaprc 文件中指向 offlineimap 的位置(我使用
~/.mutt/password_prompt.py )。

测试密码提示

要查看脚本的运行情况,你首先必须创建一个加密文件(我假设你已经设置了 GPG):

$ echo "hello world" > pass
$ gpg --encrypt pass
$ mv pass.gpg ~/.mutt/pass.gpg
$ rm pass

现在运行 Python 脚本:

$ python ~/.mutt/password_prompt.py
Enter your GPG password:
hello world

当你输入时没有任何显示,但只要你正确输入 GPG 口令,你就会看到该测试信息。

将密码提示符与 offlineimap 整合起来

我需要将我的新提示与 offlineimap 命令结合起来。我为这个脚本选择了 Python,因为我知道 offlineimap 可以对 Python 程序进行调用。如果你是一个 offlineimap 用户,你会明白唯一需要的“整合”是在你的 .offlineimaprc 文件中改变两行。

首先,添加一行引用 Python 文件的内容:

pythonfile = ~/.mutt/password_prompt.py

然后将 .offlineimaprc 中的 remotepasseval 行改为调用 password_prompt.py 中的 get_api_pass() 函数:

remotepasseval = get_api_pass()

配置文件中不再有密码!

安全问题

在你的个人电脑上考虑安全问题有时会让人觉得很偏执。你的 SSH 配置是否真的需要限制为 600?隐藏在名为 .mutt 的无关紧要的电子邮件密码真的重要吗?也许不重要。

然而,知道我没有把敏感数据悄悄地藏在我的配置文件里,使我更容易把文件提交到公共 Git 仓库,把片段复制和粘贴到支持论坛,并以真实好用的配置文件的形式分享我的知识。仅就这一点而言,安全性的提高使我的生活更加轻松。而且有这么多好的 Python 模块可以提供帮助,这很容易实现。

学习交流:

①Python电子书有

②Python开发环境安装教程有

③Python视频有

④软件开发常用词汇有

⑤Python学习路线图有

⑥项目源码案例分享有 如果你用得到的话可以直接拿走,在我的QQ技术交流Q群里

群号:200160592

Python库 | getpass4-0.0.8.tar.gz 资源分类:Python库 所属语言:Python 资源全名:getpass4-0.0.8.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.youkuaiyun.com/article/details/101784059 立即下载

相关推荐

手把手拆解DGX GB200 NVL72:1个机柜如何塞进72块GPU?详解NVLink Switch铜缆背板设计

本文深度解析英伟达DGX GB200 NVL72系统如何通过NVLink Switch铜缆背板设计,在标准42U机柜中集成72块B200 GPU,实现1800GB/s的超高带宽。文章详细介绍了模块化架构、铜缆互连技术、液冷散热方案和高密度供电系统等核心创新,为AI算力需求提供突破性解决方案。

red88的博客 1585

pythongetpass_Python模块之getpass模块的使用

Python中getpass模块的使用方法:getpass模块提供了两个函数:1. getpass.getpass()2. getpass.getuser()getpass模块,提示用户输入密码而不回显。getpass.getpass(prompt='Password: ', stream=None)用参数'prompt'提示用户开始输入,默认值为"Password:"。zai Unix上,'pr...

weixin_29643235的博客 5658

深度学习batch、batch_size、epoch、iteration以及小样本中episode、support set、query set关系

训练整个数据集是epoch、把数据集分为多少小块就是batch,每个小块(batch)多少个数据就是batch_size,整个数据集需要训练多少轮是iteration

qq_42740834的博客 1610

python telnet登录发送命令_Python telnet登陆功能实现代码

阅读目录主要使用TelnetClient类,封装了登录和执行命令的基本操作。telnet协议是TCP/IP协议族中的一员,是Internet远程登陆服务的标准协议和主要方式。它为用户提供了在本地计算机上完成远程主机工作的能力。在终端使用者的电脑上使用telnet程序,用它连接到服务器。终端使用者可以在telnet程序中输入命令,这些命令会在服务器上运行,就像直接在服务器的控制台上输入一样,可以在本...

weixin_39601642的博客 898

保姆级教程:从Navicat 11/12到15,平滑升级搞定MySQL 8.0的caching_sha2_password认证

本文提供从Navicat 11/12升级到15的保姆级教程,重点解决MySQL 8.0的caching_sha2_password认证问题。详细介绍了备份配置、新版本功能亮点、跨平台安装步骤、配置迁移流程以及高级使用技巧,帮助用户平滑过渡到Navicat 15,提升数据库管理效率。

weixin_33724046的博客 203

VSCode+Keil高效开发STM32:Keil Assistant插件配置全攻略

本文详细介绍了如何通过VSCode的Keil Assistant插件,将Keil MDK的编译调试能力与VSCode的现代编辑体验相结合,打造高效的STM32开发环境。文章涵盖了从环境配置、工程导入、智能提示设置到与STM32CubeMX协同工作的全流程攻略,旨在解决Keil编辑器效率低下的痛点,大幅提升嵌入式开发的编码与项目管理效率。

gold的博客 507

python-简单的用户与密码登录模块实现

python-简单的用户与密码登录模块实现 第一种方式: root@kali:~# cat if.py #!/usr/bin/python # --*-- coding:utf-8 --*-- #input = raw_input('please input your name:') while True: input = raw_input('please in

xwbk12的博客 9995

Quest 3开发第一步:搞定Meta账号登录和Oculus软件连不上设备的那些坑(2024实测)

本文详细介绍了Quest 3开发初期的关键步骤,包括Meta账号注册、Oculus软件安装与设备连接等常见问题的解决方案。针对国内开发者遇到的邮箱限制、验证码接收等难题,提供了实用的应对策略,并分享了开发环境配置和常见问题排查技巧,帮助开发者快速搭建Quest 3开发环境。

weixin_30333885的博客 495

用Python和Tkinter标准模块建立密码管理器

tkinter是Python 的标准库的 GUI(图形用户界面)包/模块。

cnds123的专栏 563

【MODIS处理工具】MRT(MODIS Reprojection Tool) 下载及安装

【MODIS处理工具】MRT(MODIS Reprojection Tool) 下载及安装

WW、forever的博客 2405

OpenClaw实战系列·进阶特辑02:多智能体协同——打造企业级AI中台

**企业级AI中台面临多Agent协同的挑战,本文提出基于多智能体协同的解决方案。通过分析单Agent的局限性(上下文溢出、专业度稀释等)和多Agent的核心优势(任务专注度、故障隔离等),提出三种协作架构模式(指挥型、联邦型、点对点型),并强调人格化设计的重要性。文章详细介绍Agent间通讯机制(同步/异步会话、文件系统协作)和"身脑分离"的解耦架构设计,提供可落地的企业级AI中台实施方案。

PeterPan的博客 494

python-gnupg:安全通信的强大工具

python-gnupg:安全通信的强大工具 在当今信息化社会,数据安全尤为重要。加密技术作为保障信息安全的关键手段,被广泛应用在各个领域。今天,我们要介绍的是一个Python库——python-gnupg,它为开发者提供了一种方便的方式来使用GNU Privacy Guard (GPG) 进行加密和解密操作。 项目介绍 python-gnupg 是一个Python库,它封装了GPG的命令行接口,...

gitblog_00810的博客 630

实例详解C++程序的五大内存分区

本文详细讲述C++程序在运行时的5大内存分区。 下面使用日常开发中的编程实例,详细介绍一下这5个分区,以便大家能更深刻的理解这5大内存分区。 1、栈内存区 栈内存区是我们用的最多的分区,只要有函数的地方都会使用到这个分区。栈分区是用来存放函数参数及函数局部变量值的内存区,是由编译器在编译时自动分配和释放的。 函数中的参数与函数中的局部变量占用的内存是代码执行到函数(进入函数)是分配的,在............

dvlinker的技术专栏 1万+

Python输入密码

 Python有个自带的getpass模块:import getpasspassword = getpass.getpass(Enter password: )print password 该模块继承了UNIX下的一贯风格,输入密码不回显屏蔽符。 如果需要显示屏蔽符以提示自己确实正在输入密码的话,可以使用下面的模块:import sys, tty, termio

雨婷的专栏 1万+

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

python 输入密码不可见处理

这是普通输入: #!usr/bin/python #_*_coding:utf-8_*_ name=input("what ") print name #默认name是string类型 如果想让输入不可见: import getpass passwd=getpass.getpass("输入密码") print passwd

qq_27563511的博客 7226

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

【Python】getpass 模块:安全地获取用户输入的密码或敏感信息

getpass 是 Python 标准库中的模块,用于安全地获取用户输入的密码或敏感信息。它提供了一种在命令行中隐藏输入内容的方法,避免密码在终端显示,适用于需要安全输入的脚本或应用程序。getpass 简单易用,常用于命令行工具、脚本自动化和身份验证场景。

彬彬侠的博客 2269

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

python输入三次密码程序_Python3 实现用户登陆,输入三次密码

不加注释版#/usr/bin/python3import readlineuser = "seven"passwd = "123"username = input("please the enter user:")for i in range(3):password = input("please the enter password:")if password.isdigit():passwor...

weixin_39928667的博客 4410

python自动输入账号密码_使用python打开cmd并自动输入密码

这段代码实际上可以工作(在Windows2008服务器上测试)。我用它为另一个用户调用runas,并传递他的密码。使用新用户上下文打开的新命令提示,无需输入密码。请注意,您必须安装pywin32才能访问win32 API。想法是:对于Popen命令,在没有任何输入重定向的情况下,重定向输出逐字符读取,直到遇到“:”(密码提示的最后一个字符)。使用win32包将密钥事件发送到控制台,最后使用\r结束...

weixin_39558391的博客 3465

【Python】getpass模块实战:3种场景下的安全密码输入方案

本文详细介绍了Python中getpass模块的实战应用,涵盖3种安全密码输入场景。通过基础用法解析和实战案例,展示如何在命令行工具、自动化脚本和API认证中安全处理敏感信息,避免密码明文显示风险,提升系统安全性。

aa123的博客 686

[Python模块学习]使用getpass模块无回显输入

getpass模块无回显读取密码

GanZiQim的技术备忘录 7255

python 密码输入显示星号_[145]python实现控制台密码星号输入

import msvcrt, sys, osprint('password: ', end='', flush=True)li = []while 1:ch = msvcrt.getch()#回车if ch == b'\r':msvcrt.putch(b'\n')print('输入的密码是:%s' % b''.join(li).decode())break#退格elif ch == b'\x08'...

weixin_29867767的博客 4091

Python getpass 输入密码

Python有个自带的getpass模块: import getpass   password = getpass.getpass('Enter password: ')   print password       该模块继承了UNIX下的一贯风格,输入密码不回显屏蔽符。   如果需要显示屏蔽符以提示自己确实正在输入密码的话,可以使用下面的模块: import sy...

scm002的博客 722

Python实现星号遮掩的密码输入

def pwd_input(msg = ''): import msvcrt, sys if msg != '': sys.stdout.write(msg) chars = [] while True: newChar = msvcrt.getch() if newChar in '\3\r\n': # 如果是换行,Ctrl+C,则输入结束 print '' i

Sunny 1万+

python3输入密码_Python 3.x 控制台输入密码的方法总结​

感谢ITeye的littlezhuhui的以下内容,让我今天解决了pasworld的回显问题。最近在用Python 3.2.3,想实现输入密码时回显*号,在网上查找了一下,这方面的资料相当的少,找到方法有几种 1.getpass.getpass()  ,缺点是不回显任何内容,不知道的还以为没有输入进去呢,当然这是unix风格2. unix系列下使用termios:windows下不好用,模块找不到...

weixin_39554434的博客 1090

python一直输入密码_使用python打开cmd并自动输入密码

I've managed to get the cmd being opened by python. However, using runas administrator comes with a password check before cmd.exe is executed.I'm using this to open cmd...import subprocesssubprocess.c...

weixin_39634052的博客 904

python自动输入密码_如何在shell脚本中自动输入密码?

使用ssh public key..登录就不需要输入密码了。追问……你说的这个是linux么追答我也姓米..相信叔。自己百度一下。。乖..什么事情自己动手丰衣足食。要学会自己谷歌。自己翻翻关于ssh登录公钥的文档..然后开虚拟机自己学着弄弄。今天我肚子疼,就不跟你多说了。追问……别啊 讲讲吧 完全不懂啊追答你百度一下。就有文档了,我给你讲,你还不如照着文档自己做一遍。这种10年前就有的文档。真没必...

weixin_39963744的博客 2289
上一篇: 手把手教你利用Python爬虫采集二次元美女壁纸
下一篇: 简单又实用的高级技巧,一篇文章带你深入了解Python自动化控制手机!
Python编程_可乐
博客等级 码龄6年 917粉丝 100原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值