FreeBSD QandA 1944

FreeBSD QandA

Q. パスワード用の secure hash の生成方式として MD5 を使っていますが、
   perl(1) などのスクリプトや C 言語のプログラムで crypt(3) を
   使うと DES になってしまいます。perl などからも  MD5 を利用するのに
   はどうしたらいいのでしょうか?

A. /etc/auth.conf に
     crypt_default = md5
   を入れてください。これで直ちに perl の crypt 関数で MD5 が
   使えるようになります。また、blowfish を使う場合も同様で、
     crypt_default = blf
   という指定を行えば使えます。ただし、ユーザ毎にこれを変更する方法は
   ありません。

   C 言語のプログラムから動的に secure hash の生成方式を変更
   することは可能で、具体的には crypt_set_format(3) を使います。
   次が切替えのサンプルプログラムです。

     ---サンプル ここから---
     #include <stdio.h>
     #include <unistd.h>
  
     int
     main(int argc, char *argv[])
     {
             char *salt = "Salt";
             char *pass = "pass";
  
             crypt_set_format("des");
             printf("DES: %s\n", crypt(pass, salt));
             crypt_set_format("md5");
             printf("MD5: %s\n", crypt(pass, salt));
             crypt_set_format("blf");
             printf("Blowfish: %s\n", crypt(pass, salt));
  
             return 0;
     }
     ---サンプル ここまで---

   これを例えば hash_test.c に入れて、

     % cc -o hash_test hash_test.c -lcrypt

   としてコンパイルして、実行すると

     DES: Safj2rfnJqVOw
     MD5: $1$Salt$waybwAhVEO4TqNqokkPGS/
     Blowfish: $2a$04$Salt..................iuF.iYZyE5m5qX55B4pXbGQonP.kj5y

   という結果を得ます。なお、上のプログラムは切替え方を示すサンプル
   に過ぎないので、実際には指定すべき salt の長さなどについて考慮する
   必要があります。

同一グループへのリンク

グループ名: des


間違い・追加情報を見付けた場合は、 修正案の投稿のしかた を読んだ上で、
QandA@jp.FreeBSD.org まで お知らせください。