2017-07-13 96 views
0

我正在創建一個項目以自行創建加密。 我知道這不會是安全的,我只是想與我一起工作和爲測試原因將硬盤驅動器上的BIT XXX從0更改爲1

對於algorythm的基礎知識,我將需要改變我的硬盤上的位數XY從0到1. 問題是,我不知道如何做到這一點。我將爲這個從未擁有數據的項目使用全新的驅動器。

可以說這個驅動器將是250GB大,我想改變這個驅動器上的第一個BIT從0到1,我將如何做到這一點? 我是否需要創建一個只有0的大文件,或者我可以直接告訴驅動器上的寫入部分,它需要去位置XY並將位置從0更改爲1?

我想爲此項目使用C++來歸檔最大速度。

謝謝您的建議。

+0

什麼操作系統? – jotik

回答

2

在Linux上,使用root用戶運行時,可以將整個驅動器作爲一個文件逐字地尋址。像下面這樣切換分區的第一位。

int f = -1; 
unsigned char data = 0; 

f = open("/dev/hdb1", O_RDWR); 
read(f, &data, 1); 
data = data^0x80; 
lseek(f, SEEK_SET, 0); 
write(f, &data, 1); 
close(f); 

/dev/hdb1可能是第二個驅動器上的第一個分區。您也可能會爲整個驅動器本身尋址/dev/hdb

+0

dosen't'data = data^0x80;'使它成爲一個完整的字節?如果我將這寫入位1,然後在位2上做同樣的事情,我會覆蓋位編號1或不是? –

+0

'data = data^x80'觸發'data'中的第一個(高位)位,並保持其他7位不變。 – selbie

0

好吧,我決定我將創建一個只包含null字節的文件。 如果我想改變單個位,我將使用以下的計算:

int bit = XXX; //BIT that will be adjusted 
double byte = bit/8; //Byte that contains BIT 
Byte b = getByte((int)byte); //save the Byte 
b = adjustByte(b, (int)((byte - bit)*8), VALUE); //adjust the Byte with ASCII symbol 
saveByteToFile(b, byte); //save the Byte back to File to old position 

這僅僅是僞代碼。 如果有人有更好的想法如何解決這個問題,請讓我知道。

+0

不要使用'double'類型的變量來計算文件中的字節偏移量。無論如何,「bit/8」是一個整數表達式。堅持整數。你的字節偏移量是'bit/8'。但是,該字節內的位偏移很容易計算爲「位%8」。這個'(byte-bit)* 8'表達沒有意義。我懷疑你需要了解更多關於整數類型和C中的位運算才能在此方面有效。 – selbie