Ele*_*ios 5 .net c# vb.net hash guid
我想在C#或VB.NET中学习如何生成硬件ID。基于Microsoft开发人员所采用的相同方法。
首先,在继续之前,我必须公告这个问题是一个源自其他问题的更具体的不同问题:像Microsoft一样获取硬件ID
上面链接的该问题的答案中更详细地介绍了基于SMBIOS表创建Microsoft HWID的基本问题,并在此处更深入地介绍了:为计算机指定硬件ID
我之所以尝试重现他们的方法论,只是为了遵循有关如何正确执行操作的专业标准准则:Microsoft的方法。
由于从托管.NET获取SMBIOS表似乎是不可能/未实现的任务,而且我也找不到Win32函数的任何演示性使用示例:GetSystemFirmwareTable,无论如何,对SMBIOS表进行字段解析似乎是一场噩梦,一个开发人员的工作量太大。...因为我怀疑需要短时间维护/更新有效的解析器算法:SMBIOS版本历史记录
...然后我假设了所有这些,然后选择使用WMI类进行有限制的重现(使用WMI WMI不会公开或始终为null的SMBIOS字段)我可以从Microsoft HWID实现的原始概念中重现的所有内容。
为了尝试重现Microsoft的功能,我尝试开始生成仅包含一个字段的HWID:SMBIOS制造商。
我的问题是我做错了什么,我不知道到底是什么...
因此,我在代码中发现的问题:
(我坚持在我在此问题的“ SCENARIO ”部分内链接的URL中解释了这些HWID创建的基本知识)
我得到的SHA-1字符串是40个字符。长度。该System.GUID结构不希望使用此长度的字符串,也不接受我计算出的SHA-1的原始Byte-Array数据。
@ 理查德·休斯他在这里说:
然后,您需要使用具有70ffd812-4c7f-4c7d-0000-000000000000的类型5(SHA-1)UUID生成方案作为命名空间
...但是我承认我不明白他对于使用密码命名空间的含义。构建我的SHA-1字符串时,我可能会丢失该细节。我试图分析SHA1CryptoServiceProvider该类的成员,以搜索可在其中指定名称空间的某些属性...未找到任何内容。
这是我正在使用的代码,在这里我对制造商字符串检索进行了硬编码,以简化操作:
C#示例:
string manufacturer = "American Megatrends Inc.";
byte[] charBuff = Encoding.Unicode.GetBytes(manufacturer); // UTF-16
byte[] hashBuff = null;
string hashStr = null;
using (SHA1CryptoServiceProvider cypher = new SHA1CryptoServiceProvider()) {
hashBuff = cypher.ComputeHash(charBuff);
hashStr = BitConverter.ToString(hashBuff).Replace("-", ""); // Same string conversion methodology employed in a MSDN article.
}
Debug.WriteLine("SHA-1=\"{0}\"", hashStr); // SHA-1="0E74E534EE9F1985AE173C640302F58121190593"
Guid guid = new Guid(hashBuff); // System.ArgumentException: 'Byte array for GUID must be exactly 16 bytes long.'
Run Code Online (Sandbox Code Playgroud)
VB.NET示例:
Dim manufacturer As String = "American Megatrends Inc."
Dim charBuff As Byte() = Encoding.Unicode.GetBytes(manufacturer) ' UTF-16
Dim hashBuff As Byte()
Dim hashStr As String
Using cypher As New SHA1CryptoServiceProvider
hashBuff = cypher.ComputeHash(charBuff)
hashStr = BitConverter.ToString(hashBuff).Replace("-", "") ' Same string conversion methodology employed in a MSDN article.
End Using
Debug.WriteLine("SHA-1=""{0}""", hashStr) ' SHA-1="0E74E534EE9F1985AE173C640302F58121190593"
Dim guid As New Guid(hashBuff) ' System.ArgumentException: 'Byte array for GUID must be exactly 16 bytes long.'
Run Code Online (Sandbox Code Playgroud)
预期的结果GUID将与ComputerHardwareIds.exe工具生成的GUID相同:
{035a20a6-fccf-5040-bc3e-b8b794c57f52} <-制造商
好吧,只是...我需要什么,如何修复我的代码以获得预期的结果?
| 归档时间: |
|
| 查看次数: |
376 次 |
| 最近记录: |