从不同 .Net 版本的相同种子生成简单一致的伪随机数

问题描述 投票:0回答:1

我正在为一家工厂开发软件来跟踪操作员的工作。系统为每个任务生成带有唯一序列号(TaskId)的优惠券。用户完成任务后扫描二维码或手动将序列号(以 Base 26 显示)输入到 Android 应用程序中。

为了防止用户插入相邻 ID 来获取更多优惠券的情况被利用,我使用 C# Random 函数实现了一个解决方案,以序列号作为种子在末尾附加两个字符的检查。但是,我发现 Random 函数可能无法在不同的 .NET 版本中使用相同的种子生成相同的数字。

我正在探索随机函数的替代方案,考虑 CRC 检查,但担心为相邻种子生成相邻值。我想要一个简单的解决方案,因为用户可能需要手动输入序列号。

考虑到生成字符的简单性和手动输入的便利性,在这种情况下替换随机函数的更好方法是什么?

解决方案应该足够容易让计算机计算,但又足够麻烦人类猜测(当然他们仍然可以暴力破解,但每张优惠券只值几毛钱)。

提前致谢!

c# random hash crc serial-number
1个回答
0
投票

如果我理解正确的话,你有连续的TaskId(比如101),并且你想避免有人只使用“102”,通过在末尾添加额外的随机字符(比如101G6和102FZ),从而阻止他们知道下一个有效的TaskId是什么是。

您可以使用哈希来做到这一点。哈希接受“某些东西”并输出看起来完全随机的“其他东西”。它用于保护密码。

您可以使用例如哈希的前两个字符。如果您担心您的用户现在可能会散列,您也可以使用秘密“盐”。

示例:c# 中的哈希字符串

© www.soinside.com 2019 - 2024. All rights reserved.