我在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个数字。 之后,我想加密它并再次解密。
所以我需要一些强大的加密和解密逻辑,我也想要优化代码。
答案 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';
}