gpt4 book ai didi

c# - 使用字母数字子集生成 1M 个唯一的随 secret 钥

转载 作者:行者123 更新时间:2023-11-30 13:48:52 39 4
gpt4 key购买 nike

我想生成 1M 随机(出现)唯一字母数字键并将它们存储在数据库中。每个 key 的长度为 8 个字符,并且仅使用子集“abcdefghijk n pqrstuvxyz 和 0-9”。

字母 l、m、o 和 w 被丢弃。由于打印空间有限,“m 和 w”被省略,因为每个键都将打印在产品上非常小的空间内。删除 m 和 w 可以增加 2pt 的字母大小,提高可读性。 l 和 o 被删除,因为在当前打印尺寸下它们很容易与 1、i 和 0 混淆。我们做了一些测试字符 1、i 和 0 总是被正确读取,l 和 o 有很多错误。出于与“m 和 w”相同的原因,大写字母被排除在外。

那么为什么不是一个序列呢?几个原因: key 可以在之后注册,我们不希望任何人猜测序列中的下一个 key 并注册其他人的 key 。外观:我们不需要客户和竞争对手知道我们只运送了几千把 key 。

有没有一种实用的方法来生成 key ,确保每个 key 的唯一性并将它们存储在数据库中?谢谢!

最佳答案

编辑:@CodeInChaos 指出了一个问题:System.Random 不是很安全,可以很容易地重现序列。我在这里用安全生成器替换了 Random:

var possibilities = "abcdefghijknpqrstuvxyz0123456789".ToCharArray();
int goal = 1000000;
int codeLength = 8;
var codes = new HashSet<string>();
var random = new RNGCryptoServiceProvider();
while (codes.Count < goal)
{
var newCode = new char[codeLength];
for (int i = 0; i < codeLength; i++)
newCode[i] = possibilities[random.Next(possibilities.Length)];
codes.Add(new string(newCode));
}
// now write codes to database

static class Extensions
{
public static byte Next(this RNGCryptoServiceProvider provider, byte maximum)
{
var b = new byte[1];
while (true)
{
provider.GetBytes(b);
if (b[0] < maximum)
return b[0];
}
}
}

(Next 方法不是很快,但可能足以满足您的目的)

关于c# - 使用字母数字子集生成 1M 个唯一的随 secret 钥,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11053377/

39 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com