Какие части сборки проверяет подпись строгого имени - PullRequest
1 голос
/ 10 февраля 2012

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

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

class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine("My name is " + Assembly.GetExecutingAssembly().GetName());
    }
}

После того, как я изменил сборку, я все еще могу запустить ее, и она без проблем выводит имя своей сборки с моим токеном открытого ключа:

My name is TestApp, Version=0.0.0.0, Culture=neutral, PublicKeyToken=cd4a03be895200fa

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

1 Ответ

3 голосов
/ 10 февраля 2012

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

Из Сборки со строгими именами Документация

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

Хэши используются для предотвращения изменения файла сборки, поэтому, если вы измените скомпилированную dll (с помощью, скажем, HEX-редактора), она не будет загружена (так как хеш не будет совпадать). Но как только совпадают хеши, и сборка имеет правильную подпись - она ​​загорается зеленым светом.

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