我正在考虑使用 Guid 作为网站的随机匿名访问者标识符(存储为 cookie 客户端大小和数据库服务器端),我想要一种生成 Guids 的加密方式(以便尽量减少碰撞的机会)。
为了记录,Guid 中有 16 个字节(或 128 位)。
这就是我的想法:
/// <summary>
/// Generate a cryptographically strong Guid
/// </summary>
/// <returns>a random Guid</returns>
private Guid GenerateNewGuid()
{
byte[] guidBytes = new byte[16]; // Guids are 16 bytes long
RNGCryptoServiceProvider random = new RNGCryptoServiceProvider();
random.GetBytes(guidBytes);
return new Guid(guidBytes);
}
Run Code Online (Sandbox Code Playgroud)
有一个更好的方法吗?
编辑: 这将用于两个目的,访问者的唯一 ID 和购买的交易 ID(这将简要地作为查看/更新敏感信息所需的令牌)。
我在C#中有一个彩票应用程序,其中包含要绘制的数字的数量以及要绘制的最大数量.我已编码为创建一个包含所需随机数的数组但我需要它们是唯一的并且我很难做到这一点如果有人能给我一些建议,我将非常感激,谢谢
到目前为止,这是我的代码:
class Lottery
{
static int[] numberHolder; //array to be filled with numbers up to an
//amount entered by the user eg 42 Max
static int[] drawHolder; //array to hold the each random number
//drawn from the pool of numbers eg 7 numbers
public Lottery() //Lottery class Constructor
{
}
//method which takes in a number limit and amount of numbers to be drawn
public String drawNumbers(int numLimit, int numAmount)
{
Random RandomNumber = new Random();
for (int i …Run Code Online (Sandbox Code Playgroud) 基于这个问题,我想知道是否使用GUID生成一个随机的字符串和数字有任何缺陷吗?
因此,例如,如果我想要一个随机字符串和32个或更少字符的数字,我可以使用以下C#代码:
string s = Guid.NewGuid().ToString().Replace("-", "");
Run Code Online (Sandbox Code Playgroud)
如果长度需要小于32,我将截断字符串,如果需要更长,我会将多个GUID一起添加.
这种方法有哪些缺陷?
在我写完之后,我意识到一个缺陷就是它只会有字母a到f所以我会修改这个问题:
这是一个真正随机的6个字符和10个数字的序列吗?