有些时候做的某些工具不想被传播,就想加个密,绑定电脑授权使用,这就需要找到电脑的唯一识别码
找了很多都没找到电脑真正的唯一识别码,MAC经验证是会变的,最终选择使用uuid
/// <summary>
/// 获取UUID
/// </summary>
/// <returns></returns>
public static string GetUuid()
{
string uuid = null;
try
{
SelectQuery query = new SelectQuery("select * from Win32_ComputerSystemProduct");
using (ManagementObjectSearcher searcher = new ManagementObjectSearcher(query))
{
foreach (var item in searcher.Get())
{
using (item) uuid = item["UUID"].ToString();
}
}
//有些厂商的配件不支持UUId会显示为一堆F
if (uuid == null || uuid == "FFFFFFFF-FFFF-FFFF-FFFF-FFFFFFFFFFFF")
{
uuid = GetMacAddress();
}
return uuid;
}
catch (Exception)
{
return "unknown";
}
}
在上边有一行代码
uuid = GetMacAddress();<br><br>是因为有些设备确实获取不到uuid,那就用mac码替代,虽然可变但总比没有强,对于非常需要安全性的应用还是不建议这么做,下边是获取mac码的代码
/// <summary>
/// 获取本机MAC地址
/// </summary>
/// <returns>本机MAC地址</returns>
public static string GetMacAddress()
{
try
{
string strMac = string.Empty;
ManagementClass mc = new ManagementClass("Win32_NetworkAdapterConfiguration");
ManagementObjectCollection moc = mc.GetInstances();
foreach (ManagementObject mo in moc)
{
if ((bool)mo["IPEnabled"] == true)
{
strMac = mo["MacAddress"].ToString();
}
}
moc = null;
mc = null;
return strMac;
}
catch
{
return "unknown";
}
}
为了避免两种识别码长度不一致,也为了防止用户看出这是什么(神秘感),我们对它进行MD5加密,这样结果就是固定位数了,我一般用以下这种方法
public static string GenerateMD5(string txt)
{
using (MD5 mi = MD5.Create())
{
byte[] buffer = Encoding.Default.GetBytes(txt);
//开始加密
byte[] newBuffer = mi.ComputeHash(buffer);
StringBuilder sb = new StringBuilder();
for (int i = 0; i < newBuffer.Length; i++)
{
sb.Append(newBuffer[i].ToString("x2"));
}
return sb.ToString();
}
}
这样结果就固定长度啦,也几乎解密不出来,用的时候再次获取识别码并验证就好了,对于没有服务器需要本地授权的小伙伴,就把这些东西加密,再写入到加密文件中就好了,加密方法可以等我发布下一篇文章哦!