Назад | Перейти на главную страницу

Как я могу реплицировать хэши манифеста Microsoft .NET, в идеале в командной строке Linux?

У меня есть .NET click-once приложение, которое, как я выяснил на собственном опыте (пользователь не смог установить), проверяет контрольные суммы своих файлов конфигурации на соответствие контрольным суммам в .exe.manifest как рассчитано во время сборки.

Мой пользователь не смог установить, в сообщении об ошибке указан плохой хеш. Действительно, файлы были изменены.

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

В манифесте .exe обратите внимание на <dsig:DigestValue> тег:

  <file name="config\appsettings\Production.config" size="665">
    <hash>
      <dsig:Transforms>
        <dsig:Transform Algorithm="urn:schemas-microsoft-com:HashTransforms.Identity" />
      </dsig:Transforms>
      <dsig:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" />
      <dsig:DigestValue>2cwIVAHHyOUgxBtwewfNgPU2YuQ=</dsig:DigestValue>
    </hash>
  </file>

Вот мой мыслительный процесс в командной строке Linux.

#> sha1sum config/appsettings/Development.config.deploy
a2c7bf5b7232c1c1aafbf8203a97c0b791179718

Нет, мне, очевидно, нужен base64, да:

#> sha1sum config/appsettings/Development.config.deploy | cut -f1 -d\ | xxd -r -p | base64
ose/W3IywcGq+/ggOpfAt5EXlxg=

Они явно не совпадают, поэтому я что-то упускаю.

Ищу информацию о следующем:

  1. Какая еще магия используется в этих хешах
  2. В отношении 1 в манифесте упоминается «алгоритм преобразования». Что это такое, и если это недостающий элемент, как это сделать? - РЕДАКТИРОВАТЬ: ввод XML в хэш является преобразованный этим алгоритмом перед передается в алгоритм хеширования, однако в этом случае Identity transform, поэтому я все еще ожидаю, что необработанного SHA1 в файле должно быть достаточно для получения контрольной суммы.
  3. .deploy суффикс? Насколько я могу судить, .config во время сборки и .config.deploy опубликованные на сервере текстуально идентичны. Если я ошибаюсь, это будет хорошая информация.
  4. Как все это можно реализовать с помощью инструментов Linux?