我想解密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;
}
}
}