簡體   English   中英

隨機字符串概率計算

[英]Random string probability calculation

我正在使用RNGCryptoServiceProvider從字符az / AZ / 0-9生成256位長度的隨機字符串(不是數字)。

在每秒生成<x>令牌時,我需要生成一些有關沖突的可行性的統計信息(機會是什么,可能發生多少次),但是要以一種很好的方式來證明這一點是很困難的?

是否已使用公式來計算此類概率?

我環顧了SHA-256的類似計算,但不確定它是否完全適合此模型。

任何幫助將不勝感激

編輯:顯示的代碼

public string Token(int length, string chars)
    {
        using (var generator = new RNGCryptoServiceProvider())
        {
            var bytes = new byte[length];
            generator.GetBytes(bytes);
            var chars = bytes.Select(b =>  availableChars[b%availableChars.Length]);
            var token = new string(chars.ToArray());
            return token;
        }
    }

在這種情況下,長度為64,可用字符如所示,取自字符串0-9A-Za-z

謝謝

生成32個隨機字節,使用Convert.ToBase64將其轉換為字符串。 您現在進行的轉換是不必要的。

在網絡上可以找到的基本概率論告訴您,這是安全的。 沒有研究人員曾產生過256位碰撞。

使用mod(%)時會有小的偏差。

看看是否有一種方法可以重新確定范圍,在“ C”世界中有arc4random-uniform()

請參見余數技術引入了多少偏差? ,請使用提供的代碼:

適應C#

while(true)
{
  int value = rand();
  if (value < RAND_MAX - RAND_MAX % range)
    return value % range;
}

至於隨機性,密碼安全的隨機數生成器應該基本上沒有偏差。 請檢查WRT的詳細信息。 有可用的硬件USB可連接的真實硬件randon編號生成器。

您還可以使用UUID ,它“可以確保時空上的唯一性”。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM