Можно ли подписать документ XML без необходимости использовать KeyContainerName?
-
12-10-2019 - |
Вопрос
Я хочу создать 2 действительно простых DLL:
1) Это подпишет документ XML 2), который будет проверять, что документ XML не был изменен.
Я попытался использовать rsacryptoserviceprovider и ключевой контейнер. Но когда я переезжаю на другую машину, это не работает, так как ключ хранится в машине.
Я хочу сохранить ключ в DLL, которые я создаю (я знаю, что это не отзывается), но я просто не могу понять, как написать какой -то код, чтобы просто подписать документ XML, а затем убедиться, что он не был изменен.
Так нужно ли мне использовать симметричный ключ, чтобы сделать то, что я хочу, это возможно?
Пит
Решение
Вы уже упоминаете проблемы с хранением личного ключа в 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 Контрольная сумма (или любой другой алгоритм хорошего хэширования) будет проще в реализации, и это то, что вам нужно. Это также было бы проверено на разных машинах.