java - 如何在 Linux 中使用 C 或 Java 获取硬盘的序列号 id?

标签 java c linux unix operating-system

我想制作一个系统,在其中我可以根据硬盘序列号加密/解密某些内容,以便 key 无法在计算机之间共享。

最佳答案

对于每个 Unix 变体,如何获取硬盘的序列号是不同的。

对于 Linux,如果您以 root 身份运行,最直接的方法是使用“hdparm -i/dev/sda”或更正确地使用它使用的 C 代码(ioctl)。

序列号在 Linux 中通常没有用处,因此如果您不是以 root 身份运行,则必须询问实际有用的少数子系统之一 - udev。它使用序列号来唯一标识设备,并将此信息存储在/run/udev/data (或/var/run/udev/data)下的一个文件中,该文件的名称基于 Linux 分配的设备号。

找到的第一个磁盘的数据位于/var/run/udev/data/b8:0
第二个位于/var/run/udev/data/b8:16

这是一个文本文件。

顺便说一句:磁盘序列号不是一个好的加密 key ,正如您所见,它很容易找到,而且并不像看起来那样随机。

关于java - 如何在 Linux 中使用 C 或 Java 获取硬盘的序列号 id?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28727476/

相关文章:

java - 如何对捕获 Exception.class 的方法进行单元测试?

java - Kafka - TimestampExtractor 的问题

python - (Linux) 确定图像中不同颜色的百分比

linux - 使用 configure 构建包 - 如何加入更新版本的 libs/headers

java - 将一个类的对象传递给另一个类的方法

java - 用于字段查询的 Elastic search 高级客户端等效项

c - 使用C在shell中实现无限管道

c - 如何比较两个字符串并返回相同单词的数量?

c - 如何在内联汇编中声明字符缓冲区?

linux - Bash脚本在文件结束后循环