我正在构建一个验证用户凭据的 MATLAB 应用程序。我想读入他的密码,并且想以某种方式隐藏他输入的凭据。
一些限制:
- 我必须考虑到 windows 以及 linux/mac 用户。
- 我不能保证用户系统中有任何程序(perl/python/VBS)。
这是我尝试过的:
直接指南
工作,但不是一个选项,因为用户可能在-nodesktop
(或-nodisplay
)模式下运行 matlab。
MATLAB + Java
控制台.readPassword。这把我的终端搞得一团糟。
系统()调用
本质上,我调用基于操作系统的 bash 或 dos 脚本。
我对 linux/mac 有以下要求:
[status cred] = system('stty -echo; read cred; stty echo;echo ""; echo "$cred"');
这应该获取用户凭据并将其转储到“cred”。我已经检查过它是否可以在常规终端中运行,但是在 MATLAB 中执行它不会导致任何输出,并且需要 Ctrl-C 才能恢复>>
提示。
MATLAB Perl
正如评论中所指出的,Windows MATLAB 将 Perl 打包。我尝试了以下代码段:
use Term::ReadKey;
use Term::ReadLine;
ReadMode('noecho');
$yesnoline = Term::ReadLine->new("foo");
$pass = $yesnoline->readline();
printf "$pass";
ReadMode('restore');
然后将其称为[result status] = perl('my_perl.pl')
. 在 Linux 上运行良好。在 Windows 上:
资源=
GetConsoleMode 失败,LastError=|6| 在 ReadKey.pm 第 264 行。
斯塔=
9
到目前为止,我的搜索表明这是与 Windows 的 perl 打包版本有关的问题。
知道上述方法中发生了什么吗?