954,504 Members — Technology Publication meets Social Media
Username:
Password:
Lost login information?
Have something to say? Contribute New Article Reply to this Article

Skip BMP header for DES encryption

I am writing an implementation of a DES encryption with a 64 bit plaintext, taken from the pixel information in a BMP file. So I want to skip the header which is 54 bytes, but I am not sure how to do this. This will not be a dynamic project, in the sense that I will always use the same BMP file (as I am producing both a CBC and EBC mode BMP file at the program finish)
If you have no idea what I am talking about, check out this link.
http://www.giac.org/resources/whitepaper/cryptography/62.php

So I would like to open the bmp file, skip the first 54 bytes, then consecutively read 8 byte blocks and encrypt them. I just don't know very much about using files in C++.

weasel7711
Junior Poster in Training
82 posts since Oct 2007
Reputation Points: 10
Solved Threads: 0
 
char buffer[100];
ifstream f;

f.open ("pic.bmp", ios::binary);

// skip header
f.read (buffer, 54);

// read 8 bytes into buffer
f.read (buffer, 8);
nucleon
Posting Pro in Training
478 posts since Oct 2008
Reputation Points: 163
Solved Threads: 91
 

Thank you. I do have one question though. What does the ios::binary do, does that translate the hex digits into binary when read into the buffer?

weasel7711
Junior Poster in Training
82 posts since Oct 2007
Reputation Points: 10
Solved Threads: 0
 

No. Binary mode simply ensures that all file bytes are put into the buffer as is, with no translation whatsoever. Text mode may, depending on the operating system, translate various bytes. For instance, in windows the usual end of line marker is ascii-13 followed by ascii-10. But when read in text mode, all your program sees is the ascii-10.

nucleon
Posting Pro in Training
478 posts since Oct 2008
Reputation Points: 163
Solved Threads: 91
 

What I am planning on doing is bitwise operation on the 8 bytes read in from the file. I was thinking of converting the 8 bytes to an integer value, then I remembered ints in windows are 4 bytes. Is a long 8 bytes? And is there a way to convert the 8 bytes read in to the buffer into a long value I can manipulate?

weasel7711
Junior Poster in Training
82 posts since Oct 2007
Reputation Points: 10
Solved Threads: 0
 

Why would you want to convert it to something of you can just manipulate it one byte at a time?

Nick Evan
Not a Llama
Moderator
10,112 posts since Oct 2006
Reputation Points: 4,142
Solved Threads: 403
 

How do I manipulate the bytes if they are stored as chars?

weasel7711
Junior Poster in Training
82 posts since Oct 2007
Reputation Points: 10
Solved Threads: 0
 

chars basically are bytes.
So you access them by subscripting the buffer: buffer[i]

nucleon
Posting Pro in Training
478 posts since Oct 2008
Reputation Points: 163
Solved Threads: 91
 

This article has been dead for over three months

Post: Markdown Syntax: Formatting Help
You