「 '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やORなどがbcryptDESまたはMD5暗号化アルゴリズムよりも優れている可能性があります。古代の技術と互換性があるためにDESが必要ですか?scryptこれらの秘密は正確にどのように使用されますか?

答え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

tcllibUbuntu 16.04パッケージのファイルリストを入手できますpackages.ubuntu.comから/usr/bin/des、実行しようとしているファイルは含まれておらず、公式リポジトリの他のパッケージも含まれていません。私が見る唯一のオプションはソフトウェアダウンロードtcllibパッケージをクリアした後)以下の説明に従って直接コンパイルしてください。.tar.gz(または.tar.bz2)ファイルをインストールするには?

関連情報