使用 C#(Mono) 在 Mac 上获取唯一系统 ID
Getting Unique System ID on Mac using C#(Mono)
我正在使用 Mono.I 为 Mac 移植 windows 应用程序不能在 Mac 中使用 DPAPI,我认为在 Mainboard/CPU 中获取 id 存在限制Mac 对于用户级别 programs.So 在 windows 中是否有类似 DPAPI 的东西,我可以使用 Mono 来获得一个不会改变的唯一系统 ID。
首先,远离使用 MAC 地址,因为这些地址可能会更改(欺骗或硬件更改),并且自 10.3/4 以来就不是非常 Mac 的方式了?...因为那么 "I/O Kit registry" 是获取系统 ID 的首选方法。拖放到 cmd 行和 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"
如果你想要一些人类可读的东西并且有人可以在 "About This Mac" 的主对话框中找到技术支持电话,你也可以解析出 "IOPlatformSerialNumber" 而不是 "IOPlatformUUID".. .
现在,如果您正在考虑像在 MS DPAPI 中那样存储和保护信息,KeyChain 就是这样做的地方 (OSX/iOS)。 Mono 确实有一些基于 x-plat 的 DPAPI 加密 api。
我正在使用 Mono.I 为 Mac 移植 windows 应用程序不能在 Mac 中使用 DPAPI,我认为在 Mainboard/CPU 中获取 id 存在限制Mac 对于用户级别 programs.So 在 windows 中是否有类似 DPAPI 的东西,我可以使用 Mono 来获得一个不会改变的唯一系统 ID。
首先,远离使用 MAC 地址,因为这些地址可能会更改(欺骗或硬件更改),并且自 10.3/4 以来就不是非常 Mac 的方式了?...因为那么 "I/O Kit registry" 是获取系统 ID 的首选方法。拖放到 cmd 行和 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"
如果你想要一些人类可读的东西并且有人可以在 "About This Mac" 的主对话框中找到技术支持电话,你也可以解析出 "IOPlatformSerialNumber" 而不是 "IOPlatformUUID".. .
现在,如果您正在考虑像在 MS DPAPI 中那样存储和保护信息,KeyChain 就是这样做的地方 (OSX/iOS)。 Mono 确实有一些基于 x-plat 的 DPAPI 加密 api。