我使用 Mono 为 Mac 移植一个 Windows 应用程序。我无法在 Mac 中使用 DPAPI,并且我认为在 Mac 中为用户级程序获取主板/CPU id 存在限制。那么 Windows 中是否有类似 DPAPI 的东西我可以使用 Mono 来使用获取一个不会改变的唯一系统ID。
首先,远离使用 MAC 地址,因为这些地址可能会更改(欺骗或硬件更改),并且自 10.3/4 以来这不是一种非常 Mac'ie 的方式?...从那时起,“I/O Kit 注册表”是首选方法获取系统 ID。拖放到命令行并man ioreg
对于相同的细节。
所以,不确定您是否使用 Xamarin.Mac,所以如果您are您可以绑定 IOKit IORegistryEntryFromPath/IORegistryEntryCreateCFProperty API,因为我不相信这些 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"
如果您想要一些人类可读的内容,并且有人可以在“关于本机”的主对话框中找到技术支持电话,您也可以解析出“IOPlatformSerialNumber”而不是“IOPlatformUUID”...
现在,如果您正在考虑像 MS DPAPI 一样存储和保护信息,那么 KeyChain 就是实现这一点的地方 (OSX/iOS)。 Mono 确实有一些基于 x-plat 的 DPAPI 加密 api。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)