如何查看keyring::key_set()弹窗中实时输入的字符串内容
问题描述
调用keyring::key_set()触发的弹出输入窗口默认会对所有输入内容做掩码隐藏,键入过程中无法查看当前输入的文本,无法在不调用key_get()的前提下直接核验输入内容的拼写是否正确,对应输入界面如下:
可行解决方法
keyring原生的key_set()函数没有提供控制掩码显隐的开关参数,没法直接通过传参修改默认的隐藏特性,可通过以下两种方式实现输入核验需求:
- 自定义封装输入逻辑
不直接调用原生key_set()的弹窗输入,先自行实现支持明文预览、二次确认的输入流程,确认输入内容拼写正确后,调用key_set_with_value()把确认过的内容写入密钥环即可。
最简易的控制台版本实现参考:
如果需要保留弹窗交互的形式,可以用key_set_visible <- function(service, username = NULL) { # 明文输入第一次 pwd_input1 <- readline("请输入要保存的密钥(当前输入可见,请注意周边环境安全):") # 二次输入校验 pwd_input2 <- readline("请再次输入密钥完成确认:") if (pwd_input1 != pwd_input2) { stop("两次输入的内容不匹配,操作取消") } # 校验通过写入密钥环 keyring::key_set_with_value( service = service, username = username, password = pwd_input1 ) rm(pwd_input1, pwd_input2, envir = .GlobalEnv) message("密钥已成功保存到密钥环") }tcltk包、系统原生脚本调用(Windows的win32 API、macOS的AppleScript)实现带「显示/隐藏密码」切换按钮的弹窗,输入确认后再写入密钥环,逻辑和上面的控制台版本一致。 - 覆写keyring后端的密码输入方法
如果不想修改原有的key_set()调用习惯,可以找到你当前使用的keyring后端对应的b_ask_password方法,把默认调用的掩码输入框替换为自己写的支持显隐切换的输入组件,覆写完成后原有key_set()的调用就会自动使用新的输入逻辑。
安全提示:明文输入阶段请确认周边无无关人员窥视,密钥写入完成后要及时清空内存、控制台中留存的明文密码痕迹,避免泄露。
内容的提问来源于stack exchange,提问作者Joe
相关产品推荐
相关产品推荐

