#contents
*概要 [#j2c32203]
パスワードを、乱数を元にランダムに発行します。
連続して出す場合は、乱数の初期化を秒単位で行っているので、注意してください。(この辺は、必要に応じてソースの修正をしてください)
*ソースコード [#jf6fe820]
//----------------------------------------------------------
// パスワード自動生成ツール Ver.0.1
// by myasu 2001/12/10
//----------------------------------------------------------
#include
#include
#include
//デバッグ用
//#define DEBUG
#ifdef DEBUG
#define _MYDEBUG(x) x
#else
#define _MYDEBUG(x)
#endif
//生成する文字の種類
enum Char_type {cAlphaUp, cAlphaLw, cNum, cSign };
//----------------------------------------------------------
//時間&乱数生成
int TimeDaySecond(void)
{
struct tm *nowtime;
long gettime;
time(&gettime);
nowtime = localtime(&gettime);
return(nowtime->tm_hour * 3600 + nowtime->tm_min * 60 + nowtime->tm_sec);
}
void Randomize(int num)
{
srand(num);
}
int Random(int bigin, int end)
{
int data;
for(;;){
data = rand() % (end + 1);
if(data >= bigin)
return(data);
}
}
//----------------------------------------------------------
//パスワード生成
int main(int argc, char **argv)
{
int i,
string_length, //生成するパスワードの長さ
chrmode; //パスワードに含む文字の種類
char passwd[32]; //生成したパスワード
enum Char_type chrtype; //文字の種類
//乱数の初期化
Randomize(TimeDaySecond());
//引数がない場合
if(argc <= 1){
printf("\nmake passwd - パスワード自動生成ツール Ver.0.1\n\n");
printf("usage : makepasswd [文字数] [パスワードに含む文字の種類]\n\n");
printf("[文字数] : 32文字まで\n");
printf("[パスワードに含む文字]\n");
printf(" : 0 - 英大文字\n");
printf(" : 1 - 英大文字、英小文字\n");
printf(" : 2 - 英大文字、英小文字、数字\n");
printf(" : 3 - 英大文字、英小文字、数字、記号[!\"#$%&'()*+,-./]\n\n");
return 1;
}
//生成するパスワードの長さを引数から取り込む
string_length = atoi(argv[1]);
if(string_length > 32){
printf("[第1引数] : 33文字以上は生成できません。\n");
}
//生成するパスワードに含む文字の種類を引数から取り込む
chrmode = atoi(argv[2]);
if(chrmode > 4 || chrmode < 0){
printf("[第2引数] : 0,1,2,3から選んでください。\n");
}
//デバッグ用
_MYDEBUG(printf("string_length : %d\n", string_length));
_MYDEBUG(printf("string_mode : %d\n", chrmode));
//パスワードの生成
for(i = 0; i < string_length; ++i){
//文字の種類を選択
chrtype = Random(0, chrmode);
//選択番号で分岐
switch(chrtype){
case cAlphaUp:
//大文字を生成
passwd[i] = Random(0x41, 0x5a);
break;
case cAlphaLw:
//小文字を生成
passwd[i] = Random(0x61, 0x7a);
break;
case cNum:
//数字を生成
passwd[i] = Random(0x30, 0x39);
break;
case cSign:
//記号を生成
passwd[i] = Random(0x21, 0x2f);
break;
default:
break;
}
}
//NULLで閉じる
passwd[i] = '\0';
printf("%s\n", passwd);
}
RIGHT:2005-07-12 14:16:53 (火)
----
[[家サーバ管理帳]]