Извлечение закрытого ключа из файла строгого имени?

Как говорится в заголовке, кто-нибудь знает, как извлечь закрытый ключ из файла snk? Мы хотим использовать закрытый ключ из StrongName для целей шифрования. Я прочитал:
http://msdn.microsoft.com/en-us/library/k5b5tt23(VS.80).aspx, что sn -o key.snk извлечет как закрытый, так и открытый ключ, если они существуют в файле, но я попробовал, и это просто длинная строка в формате CSV без различия между закрытым ключом и открытым ключом.


person coding4fun    schedule 05.08.2010    source источник


Ответы (1)


В документе, на который вы ссылаетесь, рядом с флагом -o написано:

Если входящий файл содержит пару ключей с закрытым ключом, закрытый ключ также извлекается.

Вы уверены, что в файле есть закрытый ключ?

Вы можете запустить sn -p key.snk, чтобы получить открытый ключ, и сравнить его с выводом sn -o key.snk - если они одинаковы, файл ключа имеет только открытый ключ, если нет, разница заключается в закрытом ключе.

person Oded    schedule 05.08.2010
comment
да, просто создал его следующим образом: sn -k key.snk. Файлы со строгими именами всегда имеют комбинацию открытого и закрытого ключей, иначе они не будут работать для подписи сборок. - person coding4fun; 05.08.2010
comment
@ user127954 - затем извлеките только открытый ключ и сравните. Смотрите обновленный ответ. - person Oded; 05.08.2010
comment
Хотя, возможно, это будет больно, потому что опция -o возвращает массив байтов, а -p возвращает строку тарабарщины :). Ну, я думаю, это не так сложно, но мне придется создать программу, чтобы прочитать ее и преобразовать в массив байтов. Я удивлен, что нет документированного способа вернуть закрытый ключ. - person coding4fun; 05.08.2010
comment
@ user127954 - Вероятно, потому что он должен быть приватным. Вы должны помнить, что вы использовали при создании файла ключа... - person Oded; 05.08.2010
comment
Да, я полностью это понимаю, но есть и другие форматы для пар открытого/закрытого ключей. Например, pfx вы можете легко извлечь закрытый ключ. Говорить, что вы не можете извлечь закрытый ключ, потому что это закрытый ключ, на самом деле не имеет смысла. Если у кого-то есть ваш файл snk, все надежды потеряны, и они могут легко подписать свой собственный код и заменить одну из ваших сборок, и ваша программа никогда не узнает ее мошеннический код. Черт возьми, может быть, я просто закончу тем, что хеширую файл snk, использую его в качестве ключа и на этом закончу. - person coding4fun; 05.08.2010