signatureXml.CheckSignature всегда возвращает false - PullRequest
2 голосов
/ 10 января 2009

Я изо всех сил пытаюсь заставить эту расшифровку шифрования работать правильно. Я использую этот класс, предоставленный 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? Чего мне не хватает?

Ответы [ 3 ]

2 голосов
/ 07 февраля 2009

Спасибо вам обоим за ваш ответ. Я закончил тем, что просто создал пару секретный / открытый ключ и использовал ее для подписи документа, открытый ключ вместе с приложением. Если бы я видел это достаточно рано, я мог бы использовать это, но я уверен, что кто-то еще найдет это полезным. Еще раз спасибо.

1 голос
/ 30 января 2009

Хорошее место, осталось от проекта, из которого я его вытащил. Библиотека обновлена.

1 голос
/ 21 января 2009

Попробуйте изменить реализацию 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);

ваш код также будет работать нормально (и вы можете сериализовать полученный ключ самостоятельно).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...