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