cryptsetupライブラリAPIを使用して「cryptseup isLuks」機能を実装する方法

cryptsetupライブラリAPIを使用して「cryptseup isLuks」機能を実装する方法

シェルスクリプトから

$crypsetup isLuks /dev/sda1

上記のコマンドは返されます。

  • 0 -> luksパーティション(暗号化されたパーティション)
  • 1 - >ルクス以外のパーティション(暗号化されていないパーティション)。

ライブラリ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ライブラリ

おすすめ記事