Можно ли подписать XML-документ без использования KeyContainerName?
Я хочу создать 2 действительно простых библиотеки:
1) который подпишет документ XML 2) который проверит, что документ XML не был изменен.
Я попытался использовать RSACryptoServiceProvider и контейнер ключей. Но когда я перехожу на другую машину, это не работает, так как ключ хранится в машине.
Я хочу сохранить ключ в dll, который я создаю (я знаю, что это не рекомендуется), но я просто не могу понять, как написать некоторый код, чтобы просто подписать XML-документ, а затем убедиться, что он не был изменен.
Так что мне нужно использовать симметричный ключ, чтобы сделать то, что я хочу, возможно ли это?
Пит
2 ответа
Вы уже упоминали о проблемах с хранением закрытого ключа в 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(/*...*/);
Если вы собираетесь проверить, что ваш XML-документ не был изменен, простую контрольную сумму MD5 (или любой другой хороший алгоритм хеширования) будет проще реализовать, и это то, что вам нужно. Это также можно проверить на разных машинах.