【发布时间】:2021-04-21 09:36:17
【问题描述】:
对于我的应用程序,我必须生成独特的 tonken。用户将能够通过 URL“https:xxxx.com/TOKEN”访问与他有关的文档。
令牌将由字母“2346789abcdefghjkmnpqrtuvwxyz”中的 6 个字符组成。
随机生成这些令牌的最佳方法是什么? (我正在开发一个带有 SQL 数据库的 .NET MVC 中的 Web 应用程序)。
我想到了一个 SQL 存储过程,它生成一个介于 1 和 594823321 之间的随机数,然后将其转换为我的自定义基数 29。
但是如何生成一个未使用的随机数呢?
提前感谢您的帮助。
【问题讨论】:
-
它们需要随机吗?
-
如果要求它们是唯一的,则不能随机生成它们。想象一下您有 N 个可用号码并使用了 N-1 个号码的情况。最后一个可用的数字是固定的,而不是随机的。
-
这可能会为您提供一些提示和想法:stackoverflow.com/questions/1458468/youtube-like-guid。为了确保唯一性,然后将其作为主键存储在数据库中,或者在 C# 中使用 HashSet
-
尝试以下操作:随机 rand = new Random();字符串输入=“2346789abcdefghjkmnpqrtuvwxyz”;字符串输出 = string.Join("", input.ToCharArray().OrderBy(x => rand.Next()).Take(6));这会产生一个没有重复的字符串。
-
您可以使用 SQL 自动增量来生成数字的线性级数,然后使用某种重新排序位的方法来生成一个看似随机但永远不会重复的数字。 (可能会希望从高于零开始自动递增的数字)
标签: c# sql security authentication math