Я изо всех сил пытаюсь заставить эту расшифровку шифрования работать правильно. Я использую класс это, предоставленный инструкциями Wolfwyrd и это.
Ниже приведен код:
RSACryptoServiceProvider rsaKey = EncryptionUtils.GetRSAFromSnkFile(@"c\:a.snk");
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.PreserveWhitespace = true;
xmlDoc.LoadXml("<foo />");
SignXml(xmlDoc, rsaKey); //http://msdn.microsoft.com/en-us/library/ms229745.aspx
bool result = VerifyXml(xmlDoc, rsaKey); //http://msdn.microsoft.com/en-us/library/ms229950.aspx
System.Diagnostics.Debug.Write(result); //false
возвращает false. Обратите внимание: я использовал тот же файл snk и тот же зашифрованный XML-документ, который я пытаюсь проверить, почему он возвращает false? Что мне не хватает?





Попробуйте изменить реализацию GetRSAFromSnkBytes (byte []) в коде Wolfwyrd на:
private static RSACryptoServiceProvider GetRSAFromSnkBytes(byte[] snkBytes)
{
if (snkBytes == null)
throw new ArgumentNullException("snkBytes");
RSAParameters param = GetRSAParameters(snkBytes);
RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
rsa.ImportParameters(param);
return rsa;
}
Я действительно не понимаю, почему он сначала генерирует ключ, а затем импортирует snk-ключ в контейнер, а не просто начинает с пустого контейнера для ключей.
Вы также можете подумать об использовании .NET для генерации ключа вместо того, чтобы возиться с snk-форматом.
Если вы измените первую строку в своем примере на
RSACryptoServiceProvider rsaKey = new RSACryptoServiceProvider(1024);
ваш код также будет работать нормально (и вы можете сериализовать полученный ключ самостоятельно).
Хорошее место, остатки мусора из проекта, из которого я его взял. Библиотека обновлена.
Спасибо вам обоим за ваш ответ. Я закончил тем, что просто создал пару закрытого / открытого ключей и использовал ее для подписи документа, открытый ключ идет вместе с приложением. Если бы я увидел это достаточно рано, я, возможно, использовал бы это, но я уверен, что кто-то другой сочтет это полезным. Еще раз спасибо.