在 shell 脚本中
$crypsetup isLuks /dev/sda1
以上命令返回
- 0 -> luks分区(加密分区)
- 1 -> 非 luks 分区(非加密分区)。
我已经在 CPP 程序中使用库 API 实现了磁盘加密。如何使用 cryptosetup API 检查分区是否为 luks 分区?
答案1
您可以使用crypt_load
函数来做到这一点。快速“重新实现”cryptsetup isLuks
可能如下所示:
#include <libcryptsetup.h>
#include <stdio.h>
#include <stdlib.h>
#define DEVICE "/dev/sda1"
int main (void) {
struct crypt_device *cd = NULL;
int ret;
ret = crypt_init (&cd, DEVICE);
if (ret != 0) {
printf ("Failed to initialize device\n");
return 1;
}
ret = crypt_load (cd, CRYPT_LUKS, NULL);
crypt_free (cd);
if (ret != 0)
return 1;
else
return ret;
}
请注意,crypt_load
读取整个 LUKS 元数据,因此如果您只想检查超级块以查看设备是否具有 LUKS 标头,那么使用 libblkid 可能会更好(并且更快)。为此你可以检查这个实现“is LUKS”的libblockdev 库。