Top.Mail.Ru
Ответы

Что думаете об этом генераторе паролей на основе псевдослучайных чисел? Щас объясню свою идею. Смысл в том, что можно

генерировать пароль свой, не храня его нигде, зная лишь строку и зерно, поэтому используются псевдослучайные числа. Ну и да, можно не выводить все пароли в консоль, а только один, по строке. Это я так, для теста. Вот исходный код на C, пробовал на линуксе через gcc компилировать и открывать программу, где-то 10-100 млн паролей обрабатывает менее чем за минуту.

123456789101112131415161718192021222324252627282930
 #include <stdio.h> 
#include <stdlib.h> 
 
int main(){ 
    const unsigned int UPPER_BOUND = 126; 
    const unsigned int LOWER_BOUND = 33; 
     
	int seed; 
	unsigned int char_count; 
	unsigned int password_count; 
	// for (int i = 0; i !=256; i++) printf("%d. %c\n", i, (char)i); 33-126 
	printf("Enter a random number (seed) that will be used to generate a password:\n"); 
	scanf("%d", &seed); 
	srand(seed); 
	 
	printf("How many characters will your password be:\n"); 
	scanf("%d", &char_count); 
	 
	printf("How many passwords you need:\n"); 
	scanf("%d", &password_count); 
	 
	for(int i = 0; i < password_count; i++) { 
			for(int j = 0; j < char_count; j++) printf("%c", (char)rand() % (UPPER_BOUND - LOWER_BOUND + 1) + LOWER_BOUND); 
			printf("\n"); 
	} 
	 
	getchar(); 
	 
	return 0; 
} 
Дополнен

#include <stdio.h>
#include <stdlib.h>

int main(){
const unsigned int UPPER_BOUND = 126;
const unsigned int LOWER_BOUND = 33;

int seed;
unsigned int char_count;
unsigned int password_count;
// for (int i = 0; i !=256; i++) printf("%d. %c\n", i, (char)i); 33-126
printf("Enter a random number (seed) that will be used to generate a password:\n");
scanf("%d", &seed);
srand(seed);

printf("How many characters will your password be:\n");
scanf("%d", &char_count);

printf("How many passwords you need:\n");
scanf("%d", &password_count);

for(int i = 0; i < password_count; i++) {
for(int j = 0; j < char_count; j++) printf("%c", (char)rand() % (UPPER_BOUND - LOWER_BOUND + 1) + LOWER_BOUND);
printf("\n");
}

getchar();

return 0;
}

Дополнен

хотел вставить через блок кода, но сайт баганулся, дополнением оформил

Дополнен

Можно также хранить списки паролей. Например, текстовый файл в таком виде:

Discord

Google

Mail

И сделать фиксированный шаг, запомнив его. Например, у нас зерно "эталонное", то есть для 1. Discord это 15185129, а строка 1961723. Делаем +10 к зерну и -5 к строке, получаем 2. Google. Либо можно дописывать: 2. Google +54/-21; 3. Mail -351/-851 в самом файле;

Дополнен

А сам файл хранить в облаке где-то. Ну или в запороленном архиве 7zip с шифрованием AES-256, если вы прям параноик, в хорошо защищенном облаке.

Дополнен

Ну и вывод по строке:

#include <stdio.h>
#include <stdlib.h>

int main(){
const unsigned int UPPER_BOUND = 126;
const unsigned int LOWER_BOUND = 33;

int seed;
unsigned int char_count;
unsigned int password_count;
// for (int i = 0; i !=256; i++) printf("%d. %c\n", i, (char)i); 33-126
printf("Enter a random number (seed) that will be used to generate a password: ");
scanf("%d", &seed);
srand(seed);

printf("Count of characters: ");
scanf("%d", &char_count);

printf("Password number: ");
scanf("%d", &password_count);

for(int i = 0; i < password_count; i++) {
for(int j = 0; j < char_count; j++) rand() % (UPPER_BOUND - LOWER_BOUND + 1) + LOWER_BOUND;
}

for (int i = 0; i < char_count; i++) printf("%c", (char)rand() % (UPPER_BOUND - LOWER_BOUND + 1) + LOWER_BOUND);
printf("\n");

getchar();

return 0;
}

По дате
По рейтингу
Аватар пользователя
Высший разум
5мес

Пока никто не знал твой алгоритм, то идея норм. Я тоже генерирую пароли по определенному слову и использую свой алгоритм без всяких случайных чисел, но стойкости для меня хватает. Программу нигде не выкладывал, так что где-то это надежно.

Аватар пользователя
Мыслитель
5мес
12345678910111213141516
 #include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 
unsigned long djb2(unsigned char *str) { 
    unsigned long hash = 5381; 
    int c; 
    while (c = *str++) hash = ((hash << 5) + hash) + c; 
    return hash; } 
int main() { 
    char str[100]; 
    unsigned int seed; 
    printf("Строка, зерно: "); 
    scanf("%99s %u", str, &seed);
    srand(djb2((unsigned char *)str) + seed); 
    for (int i = 0; i < 12; i++) putchar((rand() % 94) + 33); 
    puts(""); } 
Аватар пользователя
Просветленный
5мес

Кажется верхнеуровнево не отличается от хранения паролей в зашифрованном архиве.

Подобрать пароль к зашифрованному архиву == Подобрать зерно и строку для вашей программы

Аватар пользователя
Просветленный
5мес

хня

Аватар пользователя
Мастер
5мес

Борисик Пчелинцев, открыт 37 минут назад
Вопрос-лидер
Что думаете об этом генераторе паролей на основе псевдослучайных чисел? Щас объясню свою идею. Смысл в том, что можно
генерировать пароль свой, не храня его нигде, зная лишь строку и зерно, поэтому используются псевдослучайные числа. Ну и да, можно не выводить все пароли в консоль, а только один, по строке. Это я так, для теста. Вот исходный код на C, пробовал на линуксе через gcc компилировать и открывать программу, где-то 10-100 млн паролей обрабатывает менее чем за минуту.


Дополнен 34 минуты назад
#include <stdio.h>
#include <stdlib.h>

int main(){
const unsigned int UPPER_BOUND = 126;
const unsigned int LOWER_BOUND = 33;

int seed;
unsigned int char_count;
unsigned int password_count;
// for (int i = 0; i !=256; i++) printf("%d. %c\n", i, (char)i); 33-126
printf("Enter a random number (seed) that will be used to generate a password:\n");
scanf("%d", &seed);
srand(seed);

printf("How many characters will your password be:\n");
scanf("%d", &char_count);

printf("How many passwords you need:\n");
scanf("%d", &password_count);

for(int i = 0; i < password_count; i++) {
for(int j = 0; j < char_count; j++) printf("%c", (char)rand() % (UPPER_BOUND - LOWER_BOUND + 1) + LOWER_BOUND);
printf("\n");
}

getchar();

return 0;
}

Дополнен 34 минуты назад
хотел вставить через блок кода, но сайт баганулся, дополнением оформил

Дополнен 28 минут назад
Можно также хранить списки паролей. Например, текстовый файл в таком виде:

Discord

Google

Mail

И сделать фиксированный шаг, запомнив его. Например, у нас зерно "эталонное", то есть для 1. Discord это 15185129, а строка 1961723. Делаем +10 к зерну и -5 к строке, получаем 2. Google. Либо можно дописывать: 2. Google +54/-21; 3. Mail -351/-851 в самом файле;

Дополнен 27 минут назад
А сам файл хранить в облаке где-то. Ну или в запороленном архиве 7zip с шифрованием AES-256, если вы прям параноик, в хорошо защищенном облаке.

Дополнен 18 минут назад
Ну и вывод по строке:

#include <stdio.h>
#include <stdlib.h>

int main(){
const unsigned int UPPER_BOUND = 126;
const unsigned int LOWER_BOUND = 33;

int seed;
unsigned int char_count;
unsigned int password_count;
// for (int i = 0; i !=256; i++) printf("%d. %c\n", i, (char)i); 33-126
printf("Enter a random number (seed) that will be used to generate a password: ");
scanf("%d", &seed);
srand(seed);

printf("Count of characters: ");
scanf("%d", &char_count);

printf("Password number: ");
scanf("%d", &passwor