Можно ли подписать документ XML без необходимости использовать KeyContainerName?

StackOverflow https://stackoverflow.com/questions/4715463

Вопрос

Я хочу создать 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 Контрольная сумма (или любой другой алгоритм хорошего хэширования) будет проще в реализации, и это то, что вам нужно. Это также было бы проверено на разных машинах.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top