生成隨機密碼的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