6

これは、Mono xbuild エラー CS1548 - キー ファイルの形式が正しくないのフォローアップです。

こんにちは、VS2008 を使用して C# で記述されたアプリケーションがあります。現在、Mono を使用してこのアプリを Mac に移植しています。

pfx ファイルからキーを抽出しようとしました。最初に使用した

`sn -pc key.pfx key.snk`

これは私にエラーを与えました

'Failed to extract public key for key pair -- Keyset does not exist'.

私はそれから使用しました

`sn -p key.pfx key.snk`

これにより、必要なsnkファイルが作成されました。次に、モノでプロジェクトを選択しましたオプション>アセンブリ署名エラーをビルドしたとき

'key.snk is missing private key needed for signing'.

新しいsnkキーを作成すれば、秘密鍵と公開鍵の両方を入れることができることを理解していると思います。レガシーの問題のため、元の pfx キー値を使用できるようにしたいだけです。

4

3 に答える 3

7

snk を取得するために作成した小さなプログラムにコードを追加したばかりの答えを考えてくれた Poupou に感謝します。

using System.IO;
using System.Security.Cryptography;
using System.Security.Cryptography.X509Certificates;

namespace PfxSnk
{
    internal class Program
    {
        private static void Main(string[] args)
        {
            X509Certificate2 cert = new X509Certificate2(@"KEY.pfx", "pfxPassword", X509KeyStorageFlags.Exportable | X509KeyStorageFlags.PersistKeySet);
            RSACryptoServiceProvider provider = (RSACryptoServiceProvider)cert.PrivateKey;

            byte[] array = provider.ExportCspBlob(!provider.PublicOnly);

            using (FileStream fs = new FileStream("FileName.snk", FileMode.Create, FileAccess.Write))
            {
                fs.Write(array, 0, array.Length);
            }
        }
    }
}
于 2012-03-01T19:45:45.380 に答える
2

sn -pストロングネームから公開を抽出するために使用されます。

ただし、アセンブリに署名するには秘密鍵が必要です。そのため、この (組み込みのsn) 変換は目的には役立ちません。

残念ながら、Microsoftsnのオプションをざっと見ても、探していることを実行するためのオプションが記載されていません。

sn私の提案は、Monoとソース コードを再利用して小さなツールを作成しMono.Security.dll、PFX (pkcs#12) ファイルを読み取って SNK ファイルとして書き戻すことです。

于 2012-02-19T17:05:21.213 に答える
-1

sn -p key.pfx key.snk代わりに試してください。

于 2012-02-15T03:10:37.797 に答える