生成隨機密碼的C代碼實現

fn67 9年前發布 | 7K 次閱讀 C/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

 本文由用戶 fn67 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!