// Description:
// By Sarah Dean
// Email: sdean12@sdean12.org
// WWW: http://www.FreeOTFE.org/
//
// -----------------------------------------------------------------------------
//
#include <stdio.h>
#define SECTOR_SIZE 512
// Dump out to "stream" a pretty-printed hex dump of the memory from "data"
// Not perfect, but hey, it'll do for now...
// If dataLength%columns != 0, you may get the ASCII on the last line in
// the wrong place
//
// stream - the stream to which the pretty-printed dump should be sent
// data - pointer to the data to be pretty-printed
// dataLength - amount of data to be dumped out (in bytes)
// columns - number of columns to be used in pretty-printing the hexdump
// indent - pointer to a string to be printed at the start of each line
void HexDump(FILE *stream, const unsigned char *data, int dataLength, int columns, char *indent)
{
int i;
int j;
// Print column numbers
fprintf(stream, "%s | ", indent);
for (j = 0; j < columns; j++) {
fprintf(stream, "%02x ", j);
}
fprintf(stream, " ASCII\n");
// Print line under column numbers
fprintf(stream, "%s---+-", indent);
for (j = 0; j < columns; j++) {
fprintf(stream, "---");
}
fprintf(stream, "-------\n");
// Print out nicely formatted data
for (i = 0; i < dataLength; i = i + columns) {
fprintf(stream, "%s%02x | ", indent, i);
// Hex representation
for (j = 0; j < columns; j++) {
fprintf(stream, "%02x ", data[i + j]);
}
fprintf(stream, " ");
// ASCII representation (where possible)
for (j = 0; j < columns; j++) {
// Print char if it's printable, otherwise print a "."
if (((data[i + j]) >= ' ') && ((data[i + j]) <= '~')) {
fprintf(stream, "%c", data[i + j]);
} else {
fprintf(stream, ".");
}
}
fprintf(stream, "\n");
}
}
void main(void)
{
FILE *inFile;
FILE *outFile;
unsigned char inBuf[SECTOR_SIZE];
unsigned char outBuf[SECTOR_SIZE];
unsigned char* inBufPtr;
unsigned char* outBufPtr;
unsigned int x;
unsigned int i;
int cipher;
// 20 * 8 = 160 bits
// - it should be 20, not 32
unsigned char key[32];
unsigned char keyIdx;
unsigned int keyBytes;
// Blank out key; ensures data beyond end of buffer is zero'd
memset(key, 0, sizeof(key));
key[ 0] = 'p';
key[ 1] = 'a';
key[ 2] = 's';
key[ 3] = 's';
key[ 4] = 'w';
key[ 5] = 'o';
key[ 6] = 'r';
key[ 7] = 'd';
keyBytes = 8; // In *bytes*
inFile = fopen("inFile.dat", "rb");
if (inFile == NULL) {
printf("Unable to open inFile file\n");
exit(-1);
}
outFile = fopen("outFile.dat", "wb");
if (outFile == NULL) {
printf("Unable to open outFile file\n");
exit(-1);
}
printf("Sector size: %d\n", SECTOR_SIZE);
// Main loop
while (!feof(inFile)) {
x = fread(inBuf, 1, SECTOR_SIZE, inFile);
if (x > 0) {
printf("Bytes read: %d\n", x);
// Pad out, if needed
if (x < SECTOR_SIZE) {
// Zero out any part of the unused buffer
// This *shouldn't* be needed - it depends on the cypher implementation,
// and whether it reads beyond the data supplied to it
memset(&inBuf[x], 0, (SECTOR_SIZE - x));
}
inBufPtr = inBuf;
outBufPtr = outBuf;
if (keyBytes < 1) {
memcpy(outBuf, inBuf, SECTOR_SIZE);
} else {
keyIdx = 0;
for (i = 0; i < SECTOR_SIZE; i++) {
outBufPtr[i] = inBufPtr[i] ^ key[keyIdx];
// Increment key ptr, ready for next...
keyIdx++;
if (keyIdx >= keyBytes) {
keyIdx = 0;
}
}
}
HexDump(stdout, (const unsigned char*)outBuf, 64, 8, (char *)"");
fwrite(outBuf, 1, SECTOR_SIZE, outFile);
//exit(1);
}
} // while (!feof(inFile))
fclose(inFile);
fclose(outFile);
}
異或加解密
最后編輯于 :
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
- 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事?!?“怎么了?”我有些...
- 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
- 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
推薦閱讀更多精彩內容
- 安全加密C語言庫OpenSSL,在Android中服務器和客戶端之間的簽名驗證和數據加密通信等。 OpenSSL系...
- 小學語文修改病句的方法 修改病句是小學語文考試中常見的題型,在修改病句之前,我們應該清晰的了解有哪些病句現象,下面...
- 【蝴蝶效應】 蝴蝶效應:上個世紀70年代,美國一個名叫洛倫茲的氣象學家在解釋空氣系統理論時說,亞馬遜雨林一只蝴蝶...