Я пытаюсь проверить целостность файла на работе и в трудное время. Я не очень хорошо разбираюсь в шифровании и хешировании, так что терпите меня.
У меня есть несколько файлов, в конце которых находится хеш MD5. Я написал код для захвата байтов, которые, на мой взгляд, являются хешем, и они имеют одинаковую длину 128 байтов В файле, непосредственно перед хешем, находится ключевое слово «RSA1024», которое, как я понял, означает, что хеш зашифрован с использованием RSA 1024.
У меня есть ключ RSA в файле, и я считал байты (всегда длиной 258 байтов). Я видел много учебных пособий, в которых для извлечения ключа используется метод FromXmlString (), но этот ключ RSA не был создан с использованием инфраструктуры .net и не имеет формата XML.
Я написал следующий метод для расшифровки хеш-данных с помощью ключа, и он выдает эту ошибку при выполнении ImportCspBlob () - System.Security.Cryptography.CryptographicException: Bad Version провайдера.
Есть идеи?
public byte[] DecryptRSA(byte[] encryptedData, byte[] keyData)
{
CspParameters param = new CspParameters();
param.Flags = CspProviderFlags.UseExistingKey;
RSACryptoServiceProvider rsaProvider = new RSACryptoServiceProvider(param);
rsaProvider.ImportCspBlob(keyData);
byte[] decryptedData = rsaProvider.Decrypt(encryptedData, false);
return decryptedData;
}
Основной алгоритм
Может показаться странным, что "расшифровать хеш MD5" , особенно когда говорят, что они хотят "расшифровать его с помощью открытого ключа" . Но так работают цифровые подписи. С RSA вы можете:
- шифрование с закрытым ключом
- расшифровать с открытым ключом
![enter image description here](https://i.stack.imgur.com/HPU1x.png)
Дайджест сообщения зашифрован с помощью закрытого ключа и может быть затем расшифрован только с помощью открытого ключа. Таким образом, вы знаете, что подписать сообщение мог только человек с закрытым ключом.