Можно ли подписать XML-документ без использования KeyContainerName? - PullRequest
1 голос
/ 17 января 2011

Я хочу создать 2 действительно простых библиотеки:

1), который подпишет документ XML 2) это проверит, что документ xml не был изменен.

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

Я хочу сохранить ключ в dll, который я создаю (я знаю, что это не рекомендуется), но я просто не могу понять, как написать некоторый код, чтобы просто подписать XML-документ, а затем убедиться, что он не был изменен.

Так что мне нужно использовать симметричный ключ, чтобы сделать то, что я хочу, возможно ли это?

Пит

Ответы [ 2 ]

8 голосов
/ 18 января 2011

Вы уже упоминали проблемы с хранением закрытого ключа в dll, поэтому я не буду повторять это.

Сделайте это:

На вашем компьютере запустите этот код:

var key = new RSACryptoServiceProvider(2048);
string publicKey = key.ToXmlString(false);
string privateKey = key.ToXmlString(true);
Console.WriteLine(publicKey);
Console.WriteLine(privateKey);

это выводит две (длинные) строки. Скопируйте их в свой код:

Знак:

var privateKey = new RSACryptoServiceProvider();
privateKey.FromXmlString(/* insert the private-key XML string here */ );
privateKey.SignData(/*...*/);

Проверка:

var publicKey = new RSACryptoServiceProvider();
publicKey.FromXmlString(/* insert the public-key XML string here */ );
publicKey.VerifyData(/*...*/);
1 голос
/ 17 января 2011

Если вы собираетесь проверить, что ваш XML-документ не был изменен, простую контрольную сумму MD5 (или любой другой хороший алгоритм хеширования) будет проще реализовать, и это то, что вам нужно. Это также можно проверить на разных машинах.

...