Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Random 生成唯一的随机字母数字字符串_Random_Alphanumeric - Fatal编程技术网

Random 生成唯一的随机字母数字字符串

Random 生成唯一的随机字母数字字符串,random,alphanumeric,Random,Alphanumeric,我正在开发一个应用程序,允许用户共享一个简单调查的链接。为此,我希望为每个调查生成唯一的URL,因此具有如下URL: http://myapp.com/aBcDe1F 我希望URL的字母数字标识符部分是伪随机的,并且有点短(6-8个字符)。现在,生成它们很容易,但是如何确保它们是唯一的,但也是伪随机的?我是否必须生成它,然后通过对数据库的查询进行检查,以确保它以前没有生成过,如果没有,请重新生成另一个字符串并再次尝试相同的过程 我知道,以这种方式混淆URL实际上并不能通过任何方式确保安全性,但

我正在开发一个应用程序,允许用户共享一个简单调查的链接。为此,我希望为每个调查生成唯一的URL,因此具有如下URL:

http://myapp.com/aBcDe1F
我希望URL的字母数字标识符部分是伪随机的,并且有点短(6-8个字符)。现在,生成它们很容易,但是如何确保它们是唯一的,但也是伪随机的?我是否必须生成它,然后通过对数据库的查询进行检查,以确保它以前没有生成过,如果没有,请重新生成另一个字符串并再次尝试相同的过程


我知道,以这种方式混淆URL实际上并不能通过任何方式确保安全性,但基于密码的身份验证不适用于此应用程序,因此我尝试使用伪随机字符串

未指定语言,但许多语言支持创建GUID。为什么不使用其中的一种呢?

有多种方法,一种常见的方法是使用当前时间并对其执行md5()。随后,您可以检查您的数据库是否以前使用过。通常,产生相同字符串结果的2 md5()非常接近的概率非常低

其他方法包括使用用户的ip+时间戳作为字符串,并使用md5()将其删除


希望它能有所帮助(:

是的-我想你必须按照你描述的那样做。但是要完全学究化(嗯,我是说“安全”),请做而不是做以下事情:

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)

由于您没有将其用作键,只是为了随机使用字符串,因此可以在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]);
        }
    }
}

可以使用,但我们也可以保持简单。

重复创建,直到找到唯一的键。如果您只有6-8个字符,则必须将其保留在某个位置(数据库似乎是最佳解决方案)。请记住地址中的大小写字母不受欢迎;)根据项目的规模和重要性,您还可以尝试生成一些“非常可能唯一”的代码,例如加入当前时间戳+用户IP或随机chaptcha,并屏蔽结果,例如md5()哈希(md5的长度大于8个字母数字)。我不同意。请查看此问题的URL<代码>http://stackoverflow.com/questions/5885970/generating-unique-random-alpha-numeric-strings/5886021#5886021GUID将比生成唯一随机字母数字字符串的
URL的一部分要短。
    import java.security.SecureRandom;
    import java.math.BigInteger;