Генерация уникальных случайных буквенно-цифровых строк - PullRequest
4 голосов
/ 04 мая 2011

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

http://myapp.com/aBcDe1F

, я хочу, чтобы часть буквенно-цифрового идентификатора URL-адреса была псевдослучайной и несколько короткой (6-8 символов)).Теперь это легко создать, но как мне гарантировать, что они уникальны, но также и псевдослучайны?Нужно ли его генерировать, а затем проверить запрос к базе данных, чтобы убедиться, что он не был сгенерирован ранее, и если нет, сгенерировать еще одну строку и повторить тот же процесс еще раз?

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

Ответы [ 4 ]

3 голосов
/ 04 мая 2011

Да - я думаю, вы должны сделать это так, как вы описываете.Но чтобы быть полностью педантичным (ммм, я имею в виду «безопасный»), сделайте , а не сделайте следующее:

do
{
    generate a value
    check the database
}
while (the value did not exist)

insert a new row into the db

Существует (очень) небольшая вероятность того, что вы можете сгенерировать то же значение длядва разных пользователя одновременно.

Вместо этого используйте значение в качестве первичного ключа в базе данных и сделайте это

do
{
    generate a value
    insert a new row into the db
}
while (there was a PK violation)
0 голосов
/ 29 марта 2016

Поскольку вы не используете его в качестве ключа и просто для случайного использования строки, вы можете использовать эту программу на Java:

import java.util.Random;

public class randomString { 

    public static void main(String args[]) {

        Random charp = new Random();

        String[] chars = {"a", "b", "c", "d", "e", "f", "g", "h" ,"i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "M", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "!", "@", "#", "$", "%", "^", "&", "*", "(", ")", "1", "2", "3", "4", "5", "6", "7", "8", "9"};

        String[] word = new String[9];

        for(int i = 0; i < 9;i++) {

            word[i] = chars[charp.nextInt(70)];
        }

        System.out.print("Your randomly generated string is: ");

        for(int i = 0; i < 9;i++) {

            System.out.print(word[i]);
        }
    }
}

Я знаю, что это немного неопытно, и многие другие библиотеки икод, такой как:

    import java.security.SecureRandom;
    import java.math.BigInteger;

Может быть использован, но эй, мы можем сделать это тоже просто.

0 голосов
/ 04 мая 2011

Что ж, есть разные способы, один из них - использовать текущее время и выполнить для него md5 (). Впоследствии вы можете проверить свою базу данных, использовалась ли она ранее. Как правило, вероятность наличия 2 md5 (), которые приводят к одной и той же строке, в непосредственной близости довольно мала.

Другие методы включают использование ip + timestamp пользователя в качестве строки и md5 () it.

Надеюсь, это поможет (:

0 голосов
/ 04 мая 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...