[英]c# How to generate RSA Key pair from Random Numbers generated using PRNG
[英]How to Generate Same key that is Generated by Previously Random in c#
我有下面的函數,如果將任何鍵/值傳遞給它,它將給我隨機字符串。
現在,我想喜歡的是,如果我向該函數傳遞相同的鍵/值,那么它將像以前一樣為我提供相同的字符串。
例如。 如果我傳遞字符串“ iv3mw”,則它將返回輸出,即“ 3vmiw”。 現在我想要這樣,如果我再次傳遞相同的字符串“ iv3mw”,那么我希望像以前一樣輸出相同的輸出,即“ 3vmiw”
請建議我該怎么辦。 下面是我的代碼
public string RandomString(string key = "")
{
string input = "";
if (key.Trim() == "")
{
input = "abcdefghijklmnopqrstuvwxyz0123456789";
}
else
{
input = key;
}
var chars = Enumerable.Range(0, 5)
.Select(x => input[random.Next(0, input.Length)]);
return new string(chars.ToArray());
}
您可以在創建而不是Random
時傳遞種子。 相同的種子將始終生成相同的隨機數序列。 種子是數字,因此您需要一種從字符串到數字的方法。 這是一個工作實現:
public string RandomString(string key = "")
{
var random = new Random(key.GetHashCode());
string input = "";
if (key.Trim() == "")
{
input = "abcdefghijklmnopqrstuvwxyz0123456789";
}
else
{
input = key;
}
var chars = Enumerable.Range(0, 5)
.Select(x => input[random.Next(0, input.Length)]);
return new string(chars.ToArray());
}
您可以看到我已經使用key.GetHashCode()
植入了Random
。 這是從字符串獲取int的快速而骯臟的方法。 您應該評估它是否適合用於此目的。
值得一提的是,我相信不能依靠GetHashCode
在不同的系統或同一程序的不同執行上提供相同的值。 可能會但不能保證,因此如果出現問題,您需要將自己的字符串寫入int函數。
您可以緩存已經生成的值。
Dictionary<string, string> cache = new Dictionary<string, string>
public string RandomString(string key = "")
{
string input = "";
if (key.Trim() == "")
{
input = "abcdefghijklmnopqrstuvwxyz0123456789";
}
else
{
input = key;
}
if (cache.ContainsKey(input))
{
return cache[input];
}
else
{
var chars = Enumerable.Range(0, 5)
.Select(x => input[random.Next(0, input.Length)]);
var value = chars.ToArray();
cache[input] = value;
return value;
}
}
警告
正如克里斯在評論中提到的那樣,這將在程序的多次運行之間產生不一致的結果。
MD5哈希為相同的輸入產生相同的輸出,因此確保了一致性。
一個簡單的例子
using System.Security.Cryptography;
using (MD5 md5Hash = MD5.Create())
{
byte[] data = md5Hash.ComputeHash(Encoding.UTF8.GetBytes(source));
StringBuilder sBuilder = new StringBuilder();
for (int i = 0; i < data.Length; i++)
{
sBuilder.Append(data[i].ToString("x2"));
}
return sBuilder.ToString();
}
您在哪里聲明“隨機”變量?
我猜你的隨機變量是System.Random類的實例。 該類有2個構造函數:一個沒有參數,另一個帶有Int32參數(隨機種子值)。 如果使用第二個構造函數(在其中設置種子值的構造函數),則每次使用相同的種子值時,您將獲得相同的隨機數序列(因此,具有相同的RandomString)。
希望能有所幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.