0

Mono を使用して Mac 用の Windows アプリケーションをインポートしています。Mac では DPAPI を使用できません。また、Mac でユーザー レベル プログラム用にメインボード/CPU ID を取得する際に制限があると思います。変更されない一意のシステム ID を取得します。

4

1 に答える 1

3

まず、MAC アドレスは変更される可能性があり (スプーフィングまたはハードウェアの変更)、10.3/4 以降はあまり Mac らしい方法ではないため、MAC アドレスの使用は避けてください。システム ID を取得します。コマンドラインにドロップして、man ioreg同じ詳細を確認します。

したがって、Xamarin.Mac を使用しているかどうかは不明です。使用している場合、IOKit IORegistryEntryFromPath/IORegistryEntryCreateCFProperty API のバインディングを行うことができます。これらは現在 C# ラッパーにあるとは思えませんが、私が使用する本当に簡単な方法は:

using System;
using System.Diagnostics;
using System.Text;

namespace uuidmac
{
    class MainClass
    {
        static string MacUUID ()
        {
            var startInfo = new ProcessStartInfo () {
                FileName = "sh",
                Arguments = "-c \"ioreg -rd1 -c IOPlatformExpertDevice | awk '/IOPlatformUUID/'\"",
                UseShellExecute = false,
                CreateNoWindow = true,
                RedirectStandardOutput = true,
                RedirectStandardError = true,
                RedirectStandardInput = true,
                UserName = Environment.UserName
            };
            var builder = new StringBuilder ();
            using (Process process = Process.Start (startInfo)) {
                process.WaitForExit ();
                builder.Append (process.StandardOutput.ReadToEnd ());
            }
            return builder.ToString ();
        }

        public static int Main (string[] args)
        {
            Console.WriteLine (MacUUID ());
            return 0;
        }
    }
}

出力例:

 "IOPlatformUUID" = "9E134619-9999-9999-9999-90DC147C61A9"

「IOPlatformUUID」の代わりに「IOPlatformSerialNumber」を解析することもできます。人間が読めるものが必要な場合は、誰かがテクニカルサポートコールの「この Mac について」のメインダイアログで見つけることができます...

MS DPAPI のように情報の保存と保護を検討している場合、KeyChain はそれを行う場所です (OSX/iOS)。Mono には、x-plat ベースの DPAPI 暗号化 API がいくつかあります。

于 2015-07-30T05:50:47.093 に答える