#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 (火)
----
[[家サーバ管理帳]]
トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS