C中的随机密码生成

时间:2017-05-09 11:10:06

标签: c

我在C中有随机密码生成器的简单代码。

#include <stdio.h>
#include <stdlib.h>
#include<conio.h>
#include<string.h>
char *create_pass(int);
void encrypt(char password[],int key);
void decrypt(char password[],int key);

int main(void)
{
    /* Length of the password */
    int length;
    int num;
    int temp;
    char password[10];
    srand((unsigned int) time(0));

    printf("\n Enter the length of password : ");
    scanf("%d",&length);
    strcpy(password,create_pass(length));
    printf("\n Password Generated  :- %s",password);

    encrypt(password,0xFACA);
    printf("\n Password Encryption  :- %s",password);

    decrypt(password,0xFACA);
    printf("\n Password dencryption  :- %s",password);

    getch();
    return EXIT_SUCCESS;
}

char *create_pass(int length)
{
    char randomString[10];
    int i,length_1;

    length_1=length/2;
    for(i=0;i<length_1;i++)
    {
        randomString[i]=(rand() % 25+ 65);
        srand(rand());
    }
    for(;i<length;i++)
    {
        randomString[i]=(rand() % 9+ 48);
        srand(rand());
    }
    randomString[i] = '\0';
    return randomString;
} 


void encrypt(char password[],int key)
{
    unsigned int i;
    for(i=0;i<strlen(password);++i)
    {
        password[i] = password[i] - key;
    }
}

void decrypt(char password[],int key)
{
    unsigned int i;
    for(i=0;i<strlen(password);++i)
    {
        password[i] = password[i] + key;
    }
}

我想生成密码,其中一半的长度是字母,剩下的是数字。 例如:如果我给8个字符,4个字母和4个数字。 之后,我想加密它并再次解密。

所以我需要一些强大的加密和解密逻辑,我也想要优化代码。

2 个答案:

答案 0 :(得分:0)

返回局部变量的地址是一个问题(因为它只在子例程执行期间存在,如果没有声明为静态,并且一旦你超出范围就会定义值),考虑只传递一个缓冲区来填充通过功能。

void create_pass( char* randomString, size_t length )
{
    sizet_t i = 0;

    srand(rand());
    strcpy(randomString,"");

    for( i = 0; i < (length/2); i++ )
    {
        *(randomString + i) = ( rand() % 25 + 65 );
    }
    for( ; i < length; i++ )
    {
        *(randomString + i) = ( rand() % 9 + 48 );
    }
} 

答案 1 :(得分:0)

您可以返回获得的数组

void passWord(char password[],int alphabets=0,int numbers=0)
{
    int x=0;


     random_device rseed;
     mt19937 rgen(rseed()); 


for(int i=0;i<alphabets;i++)
{
    uniform_int_distribution<char> idist(65,90); // Capital Alphabets
    password[x++]=idist(rgen);

}

for(int i=0;i<numbers;i++)
{
   uniform_int_distribution<numbers> idist(48,57); // Numeric Values
   password[x++]=idist(rgen);

}
   password[x]='\0';

  }