kazmax - Linux で自宅サーバー

crypt - ライブラリコールの説明 - Linux コマンド集 一覧表

  1. 名前
  2. 書式
  3. 説明
  4. 返り値
  5. エラー
  6. GNU 拡張
  7. 準拠
  8. 関連項目

名前

crypt - パスワードとデータの暗号化

書式

#define _XOPEN_SOURCE
#include <unistd.h>
char *crypt(const char * key , const char * salt );

説明

crypt ()はパスワード暗号化関数である。 鍵探索のハードウェアによる実装を妨げるように(その他にもいろいろ) 変更した Data Encryption Standard アルゴリズムを元にしている。

key はユーザが入力するパスワードである。

salt は集合 [a \(enzA \(enZ0 \(en9./ ] から選ばれた 2 文字の文字列である。 この文字列はアルゴリズムの出力を 4096 通りにかき乱すのに使われる。

key の最初の 8 文字の各文字から下位 7 ビットをとって 56 ビットの鍵が得られる。 この 56 ビットの鍵は特定の文字列(ふつうはすべて 0 の文字列) を繰り返し暗号化するのに用いられる。 返り値は暗号化されたパスワードへのポインタで、13 の印字可能な ASCII 文字 からなる(最初の 2 文字は salt そのもの)。 返り値は、関数呼出しのたびに上書きされる静的なデータへのポインタである。

警告: 鍵空間は 2-2560= 7.2e16 の可能な値から成る。 この鍵空間の全探索は強力な並列計算機を使えば可能である。また crack (1)のようなソフトウェアはこの鍵空間の中で、多くの人にパスワードとして 使われるような鍵についての全探索が可能である。 それゆえ、パスワードを選択するときには、すくなくとも、 一般的に使われる単語と名前は避けるべきである。   passwd (1) を使う時にはクラックされうるパスワードについての検査をすることが 推奨される。

DES アルゴリズムにはいくつかの癖があり、それによってパスワード認証以外に   crypt (3) を使うのはたいへんよくない選択となっている。もし   crypt (3) を暗号プロジェクトに使おうという案をもっているならば、それはやめたほうが よい。暗号化についてのよい本と誰でも入手できる DES ライブラリのひとつを 手にいれるべきだ。

返り値

暗号化されたパスワードへのポインターが返される。 エラーの場合には NULL が返される。

エラー

ENOSYS
crypt ()関数が実装されていない。多分アメリカの輸出規制のために。

GNU 拡張

この関数の glibc2 版は以下のような拡張機能がある。 もし salt の文字列の最初の 3 文字が "$1$" であり、最大 8 文字の後、 最後に "$" で終わっている(これはなくてもよい)場合、 DES ではなく MD5 を使った暗号化アルゴリズムが用いられ、 出力は最大 34 バイトとなる。 出力は "$1$<string>$" の形式であり、 "<string>" は salt における "$1$" に引き続く 8 文字以下の文字列、 その後ろに [a \(enzA \(enZ0 \(en9./ ] の集合から 選ばれる 22 バイトである。 この場合、(最初の 8 文字ではなく)キー全体が意味がある。

この関数を利用するプログラムは -lcrypt オプションをつけて リンクしなければならない。

準拠

SVr4, 4.3BSD, POSIX.1-2001

関連項目