容器VeraCrypt

时间:2018-12-21 00:18:42

标签: c encryption containers veracrypt

我想解密VeraCrypt容器的标头。我创建了一个容器。我已经从容器头中提取了加密的数据(盐,VERA字符串的加密位置等)。我已经在XTS模式下实现了AES,并通过PBKDF2函数来创建用于加密头的头。我的功能XTS_EncryptSector有问题。我不知道VeraCrypt容器的调整值是多少。我一直在寻找VeraCrypt和XTS模式的文档,无处可寻。他能告诉我在哪里找到它吗?谢谢前进!

const uint8_t AES_BLK_BYTES=16;
const uint8_t GF_128_FDBK=0x87;

    void XTS_EncryptSector(const uint8_t* input, const uint8_t* masterkey1, const uint8_t* masterkey2, uint8_t* output, uint8_t* tweak, int sectorsize){
        int i=0,j=0;
        uint8_t T[AES_BLK_BYTES];
        uint8_t x[AES_BLK_BYTES];
        uint8_t cin, cout;
        for(i=0;i<16;i++){
            x[i]=0x00;
            T[i]=0x00;
        }
        for(j=0;j< AES_BLK_BYTES;j++){
            T[j]=(uint8_t)(tweak[j]&0xFF );
            tweak[j]=tweak[j];
            }
        aes(T,masterkey2,T);
        for(i=0;i<sectorsize;i+=16){
                for (j=0;j<AES_BLK_BYTES;j++)
                x[j] = input[i+j] ^ T[j];

                aes(x,masterkey1,x);
                for (j=0;j<AES_BLK_BYTES;j++)
                output[i+j] = x[j] ^ T[j];

                //Multiply T by a
                cin=0;
                for(j=0;j<AES_BLK_BYTES;j++){
                    cout=(T[j] >> 7) & 1;
                    T[j] = (( T[j] << 1 ) + cin ) & 0xFF;
                    cin=cout;
                }
                if(cout) {
                    T[0] ^= GF_128_FDBK;
                }
            }
    }

0 个答案:

没有答案