В чем разница между PublicKeyToken и открытым ключом? - PullRequest
6 голосов
/ 30 марта 2011

Каждый подписанный .NET имеет как токен открытого ключа (8 байт), так и открытый ключ (128 байт).В чем разница между двумя, и зачем нам два открытых "ключа"?

1 Ответ

6 голосов
/ 30 марта 2011

Токен открытого ключа - это просто хэш открытого ключа . Здесь для информация .


UPDATE

Зачем нам нужен открытый ключ?

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

Этот процесс гарантирует, что сборка не была нарушена.

Из CLR через C #:

Подписание сборки закрытым ключом гарантирует, что держатель соответствующий открытый ключ произвел сборка. Когда сборка установлен в GAC, система хэширует содержимое файла содержит манифест и сравнивает значение хэша с цифровым RSA значение подписи, встроенное в PE файл (после подписания его с открытый ключ). Если значения идентичны, содержимое файла не имеет был подделан, и вы знаете, что у вас есть открытый ключ, который соответствует частному издателю ключ. Кроме того, система хеширует содержание другого собрания файлы и сравнивает значения хеш с хэш-значениями, хранящимися в Таблица FileDef файла манифеста. Если есть значения хеша не совпадают, в хотя бы один из файлов сборки имеет был подделан, и сборка не удастся установить в GAC.


ОБНОВЛЕНИЕ 2

Зачем нужен открытый ключ token ? Поскольку открытый ключ слишком большой, чтобы с ним работать (опять же из CLR visa C #):

Размер открытых ключей делает их Трудно работать с. Делать вещи проще для разработчика (и для завершения пользователи тоже), токены были создано. Токен открытого ключа 64-битный хэш открытого ключа. Переключатель -tp SN.exe показывает общедоступный ключевой токен, соответствующий полный открытый ключ в конце его выход. Потому что открытые ключи такие большие цифры, и одна сборка может ссылки на многие сборки, большой процент от полученного файла общий размер будет занят информация открытого ключа. Сохранить пространство для хранения, Microsoft хэширует открытый ключ и занимает последние 8 байтов хешированной стоимости. Эти уменьшены значения открытого ключа - известные как открытый ключ токены - это то, что на самом деле хранится в таблица AssemblyRef. В общем, разработчики и конечные пользователи увидят Значения токена открытого ключа намного больше часто, чем полный открытый ключ ценности. Обратите внимание, однако, что CLR никогда не использует токены открытого ключа, когда принятие решений о безопасности или доверии потому что возможно, что несколько открытые ключи могут хешировать в один токен открытого ключа.

...