[英]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.