簡體   English   中英

以指定的位長生成鹽

[英]Generating salt with specified bit length

我有一個應該為我生成64字節(512位)鹽的方法:

public static string GenerateSalt()
{
    var rngCrypto = new RNGCryptoServiceProvider();
    byte[] saltBytes = new byte[64];
    rngCrypto.GetBytes(saltBytes);

    string result = Convert.ToBase64String(saltBytes);

    return result;
}

這似乎運行良好, saltBytes字節saltBytes的大小為64字節。 但是,我無法在由char(64)類型的列組成的MS SQL數據庫表中輸入結果。

我的假設是, Convert.ToBase64String(saltBytes); 我這邊的方法是錯誤的,但是我想知道我該如何改善。 快速瀏覽System.Text.ASCIIEncoding.Unicode.GetByteCount(secondSalt); 顯示一個176字節而不是64字節的字符串大小。

當從64個字節(512位)開始,然后轉換為64位時,每個字節僅存儲6位,因此您需要ceiling(512/6)= 86個字節來存儲結果(不確定176字節來自)。

字節數組在邏輯上是以256為底的數字。將其轉換為以64為底的數字將使其更長。 就像從十六進制F0轉換為二進制1111111100000000一樣,它會更長。

如果要將鹽以人類可讀的以64位為底的編碼字符串存儲在數據庫中,則它必須比64個單字節字符長得多。

至於通過ASCII編碼器運行它-我不知道您要在這里做什么。 對於非文本數據,這聽起來很奇怪。 你可以解釋嗎?

暫無
暫無

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

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