cryptsetup 라이브러리 API를 사용하여 "cryptseup isLuks" 기능을 구현하는 방법

cryptsetup 라이브러리 API를 사용하여 "cryptseup isLuks" 기능을 구현하는 방법

쉘 스크립트에서

$crypsetup isLuks /dev/sda1

위 명령은 반환됩니다.

  • 0 -> luks 파티션(암호화된 파티션)
  • 1 -> Luks가 아닌 파티션(암호화되지 않은 파티션).

라이브러리 API를 사용하여 CPP 프로그램에서 디스크 암호화를 구현했습니다. 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;
}

전체 LUKS 메타데이터를 읽으 므로 crypt_load장치에 LUKS 헤더가 있는지 확인하기 위해 슈퍼블록을 확인하려는 경우 libblkid를 사용하는 것이 더 나을 수 있습니다(그리고 더 빠를 수도 있습니다). 이를 위해 확인할 수 있습니다이 구현"루크스야"libblockdev 라이브러리.

관련 정보