Должен ли я кодировать данные перед их хешированием? - PullRequest
1 голос
/ 29 ноября 2011

Должен ли я кодировать данные перед хэшированием, чтобы избежать Invalid length for a Base-64 char array.

# мои .cs:

Stream des = file.InputStream;
byte[] data = new byte[file.ContentLength];
des.Read(data, 0, file.ContentLength);
FileStream f = new FileStream(targetFileName, FileMode.Create, FileAccess.ReadWrite);
f.Write(data, 0, data.Length);
f.Flush();
f.Close();
///////////////////////////////////////////////////////////////////////////////////////////
var sha = new System.Security.Cryptography.SHA512Managed();
string hash2 = Convert.ToBase64String(sha.ComputeHash(data));

и если ответ да, как кодировать байтовый массив.

Примечание:

Я использую хеширование, чтобы однозначно идентифицировать загруженные файлы для любых изменений.

1 Ответ

3 голосов
/ 29 ноября 2011

Эта ошибка возникает при декодировании base-64, поскольку действительная строка base-64 всегда кратна 4 символам (иногда с несколькими символами заполнения). Нет, вам не нужно кодировать / дополнять вход до ToBase64String. Скорее, это звучит так, как будто вы теряете некоторые символы, когда переносите / , сохраняете его (возможно, вы передаете его в строке запроса и получаете + против пробел вопрос?)

...