磁盘序列号获取之坑

场景:

首先场景时发生在自己写的量化交易客户端软件上,券商交易,要求记录用户操作计算机的IP,网卡MAC地址,硬盘序列号信息。其中IP与网卡MAC地址是很容易获取到的,硬盘序列号其实获取也不难,只不过在低版本Windows系统行就有了坑,比如Windows7,通过相关命令获取到的并不是真正的序列号,而是经过 每4位HEX字符经过little endian的总长为40为的字符串 。比如:

命令:wmic diskdrive get serialnumber | wmic path win32_physicalmedia get SerialNumber | wmic path Win32_DiskDrive get SerialNumber
结果:32535554574e4741314134313532204a20202020

而通过专业软件获取到的真实硬盘序列号:S2TUNWAGA11425J

 

解决:

首先用nodejs里的systeminformation组件可以获取到几乎所有硬件信息,当然包括硬盘序列号,但是,Windows7环境下返回的还是如上40位字符串。(Windows10下面是没有任何问题的)

一开始,以为返回的40位字符串『32535554574e4741314134313532204a20202020』为『S2TUNWAGA11425J』的16进制转码。
于是就进行了HEX2ASCII转码,获取到结果:『2SUTWNGA1A4152 J 』。很显然,结果是错误,但是很奇怪的是,字母都是对的,只是顺序各种颠倒。

于是,把正确的序列号转为HEX和结果对比一下:

正确序列号HEX:5332 5455 4e57 4147 4131 3134 3235 4a20 2020 
命令返回的HEX:3253 5554 574e 4741 3141 3431 3532 204a 2020

发现规律了吧!后来在一片帖子中也发现了解说,就是文章开头讲到的规律。接下来要做的就是写个算法,把这40位字符的顺序按照规律,重新给排序回来。然后在进行HEX2ASCII转码就会得到正确的序列号了。

你可能感兴趣的:(【Windows】配置环境)