如何避免此错误“无法执行“des”:没有这样的文件或目录”?

如何避免此错误“无法执行“des”:没有这样的文件或目录”?

我正在尝试按照概述在 Expect 中进行加密在这个维基中在 Ubuntu 16.04 上。我已经安装了tcllib

root@alarmux:/home/abdmin# apt-get install tcllib
Reading package lists... Done
Building dependency tree       
Reading state information... Done
tcllib is already the newest version (1.17-dfsg-1).
0 upgraded, 0 newly installed, 0 to remove and 77 not upgraded.

但是,当我运行脚本时,我得到:

couldn't execute "des": no such file or directory
    while executing
"exec echo "$pd" | des -e -k $key -b > /home/abdmin/$filename"
    (procedure "utility_encrypt" line 3)
    invoked from within
"utility_encrypt pswd encrypted_Pass"
    (file "./tclTest" line 22)

为什么命令无法des执行?

答案1

该页面列出了多种解决方案,因此您只需使用其中一种或其他解决方案,具体取决于您想要执行的操作。

  1. 命令des代码依赖于一些名为des.该命令不是 TCL 提供的,也不是tcllib.它可能是一种古老的东西,曾经用于(旧的、糟糕的、不安全的)DES 或 3DES 加密。您需要找到该des命令或使用兼容的命令。
  2. tcllib确实提供了des(n)界面,但似乎没有记录在您链接的页面上。 DES 再次非常弱且非常古老。
  3. tcllib确实提供了md5crypt(n)您链接的页面上提到的界面。

像 PGP 或bcrypt或 之类的东西scrypt可能是比 DES 或 MD5 加密算法更好的选择,尽管不清楚您要解决什么问题......您是否需要 DES 来与古老的东西兼容?这些秘密到底是如何被使用的?

答案2

正如中提到的一条评论,如果您只想避免肩窥明文密码,您可以使用简单的编码。例如,这是 Perl 中的一个

# Generate encoding
echo secret123 | perl -e 'chomp($passwd=<>); chomp($encoded=pack("u",$passwd));print "$encoded\n"'
)<V5C<F5T,3(S

这里的编码密码secret123)<V5C<F5T,3(S

# Restore cleartext
echo ')<V5C<F5T,3(S' | perl -e 'chomp($encoded=<>); chomp($passwd=unpack("u",$encoded)); print "$passwd\n"'
secret123

答案3

tcllib您可以获取Ubuntu 16.04 软件包的文件列表在packages.ubuntu.com 上/usr/bin/des,它不包含您尝试运行的文件- 官方存储库中的任何其他包也不包含。我看到的唯一选择是下载软件并(清除tcllib包后)自行编译它,如下所述:如何安装 .tar.gz(或 .tar.bz2)文件?

相关内容