生成隨機密碼的C代碼實現
問題描述
某些軟件在登錄的時候,經常會要求用戶輸入一個系統發過來的隨機密碼(或稱校驗碼),用于對用戶的身份進行校驗,防止惡意登錄。
要求用C語言生成一組長度為6位的隨機密碼串。
rand函數簡介
rand函數是真正的隨機數生成器,它會返回一個范圍在0到RAND_MAX(2147483647)之間隨機數值。
該函數的原型為:int rand(void);
在使用該函數的時候,要包含頭文件“stdlib.h”。
/********************************************************************** * 版權所有 (C)2015, Zhou Zhaoxiong。 * * 文件名稱:TestRand.c * 文件標識:無 * 內容摘要:測試rand()函數的用法 * 其它說明:無 * 當前版本: V1.0 * 作 者: Zhou Zhaoxiong * 完成日期: 20150316 * **********************************************************************/ #include <stdio.h> #include <stdlib.h> #include <string.h> // 重定義數據類型 typedef unsigned char UINT8; typedef signed int INT32; typedef unsigned int UINT32; /********************************************************************** * 功能描述:主函數 * 輸入參數:無 * 輸出參數:無 * 返 回 值:無 * 其它說明:無 * 修改日期 版本號 修改人 修改內容 * ------------------------------------------------------------------- * 20150316 V1.0 Zhou Zhaoxiong 創建 ***********************************************************************/ INT32 main() { UINT32 iLoopFlag = 0; UINT32 iRandValue = 0; UINT8 szRandValue[100] = {0}; UINT8 szFetchValue[100] = {0}; for (iLoopFlag = 0; iLoopFlag < 20; iLoopFlag ++) // 生成20個隨機密碼 { iRandValue = rand(); snprintf(szRandValue, sizeof(szRandValue)-1, "%d", iRandValue); if (strlen(szRandValue) >= 6) // 獲取后六位 { strncpy(szFetchValue, szRandValue+strlen(szRandValue)-6, 6); printf("%s\n", szFetchValue); } else // 位數不足, 在左邊補0 { snprintf(szFetchValue, sizeof(szFetchValue)-1, "%0*d%s", 6-strlen(szRandValue), 0, szRandValue); printf("%s\n", szFetchValue); } } return 0; }
makefile文件內容
TestRand : TestRand.c
gcc -c -g TestRand.c
gcc -g -o release/TestRandTestRand.o
rm *.o
隨機密碼的生成
執行“make”命令之后,轉到“release”目錄之下,執行“TestRand”命名,生成的隨機密碼如下所示:
289383
930886
692777
636915
747793
238335
885386
760492
516649
641421
202362
490027
368690
520059
897763
513926
180540
383426
089172
455736