|
li zhiyuan wrote: thanks for your reminder, i didn't find, can you send me again.
code in C#: [^]
pseudo code: [^]
comments: [^]
theory: [^]
see maxwell's comment also.
gentle query: why these are not useful?
|
|
|
|
|
Is there any way of establishing whilst running an installation program, whether the session running it has administrator authority.
Bram van Kampen
|
|
|
|
|
IsUserAnAdmin()[^]
Nobody can give you wiser advice than yourself. - Cicero
.·´¯`·->Rajesh<-·´¯`·.
Codeproject.com: Visual C++ MVP
|
|
|
|
|
|
Shontay wrote: this program is surposed to do the same but by using another parameter
not clear, can you pleace be more specific.
|
|
|
|
|
I meant by returning the lines by using a different function
|
|
|
|
|
printf() ?
what does your "printLine()" do?
|
|
|
|
|
Shontay wrote: ...but by using another parameter.
This makes no sense. What function's parameter are you referring to? As it stands, the printLine() function is being sent one argument. Are you implying that printLine() takes an additional argument?
"Normal is getting dressed in clothes that you buy for work and driving through traffic in a car that you are still paying for, in order to get to the job you need to pay for the clothes and the car and the house you leave vacant all day so you can afford to live in it." - Ellen Goodman
"To have a respect for ourselves guides our morals; to have deference for others governs our manners." - Laurence Sterne
|
|
|
|
|
Do you have printLine codes?
|
|
|
|
|
Hey Guys,
Do any of you know of any win32 api or DeviceIOControl commands that allow me to:
Retrieve the current channel my wifi adapter is communicating on?
thank you,
Michael
|
|
|
|
|
Hello,
I am using the AES to encrypt and decrypt data from a txt file... but when decyrpted back i am getting the text + garbage
For example i am encrypting the pixel values of an image...
-13224404 -14211046 -14605042 -13682410 -12298975 -11245015 -10322644 -9532112 -8609993 -7490750 -6240432 -5516455 -4990625 -4332695 -3675534 -3412107 -3082376 -2753413 -2687618 -2884997 -3082374 -3082628 -3345799 -3740555 -3675016 -3675013 -3675267 -3609474 -3412093 -3214714 -3017333 -2885749 -2557300 -2425716 -2622326 -2885500 -3082625 -3345797
When decrypted back i am getting:-
-13224404 -14211046 -14605042 -Å-¯SôEÔµ¼g4µË
Please help me out how to solve this problem... I am fwding the codes:-
<br />
#include<iostream.h><br />
#include <stdio.h><br />
#include <stdlib.h><br />
#include <assert.h><br />
#include <windows.h><br />
#include <string.h><br />
#include <memory.h><br />
#include <process.h><br />
#include <tchar.h><br />
#include <dos.h><br />
#include <conio.h><br />
#include <fstream><br />
#include <string><br />
using namespace std;<br />
<br />
#include <time.h><br />
<br />
double start_time , stop_time;<br />
<br />
double Add,sub,sft,mix;<br />
double Add1,Add2,Add3,sub1,sub2,sft1,sft2,mix1;<br />
double invadd1,invadd2,invadd3,invsub1,invsub2,invsft1,invsft2,invmix1;<br />
static int count1, count2= 0;<br />
<br />
<br />
double freq;<br />
long start;<br />
<br />
<br />
void sec_init(void)<br />
{<br />
LARGE_INTEGER lFreq, lCnt;<br />
QueryPerformanceFrequency(&lFreq);<br />
freq = (double)lFreq.LowPart;<br />
QueryPerformanceCounter(&lCnt);<br />
start = lCnt.LowPart;<br />
}<br />
<br />
<br />
double sec(void)<br />
{<br />
LARGE_INTEGER lCnt;<br />
long tcnt;<br />
QueryPerformanceCounter(&lCnt);<br />
tcnt = lCnt.LowPart - start;<br />
return ((double)tcnt) / freq;<br />
}<br />
<br />
<br />
typedef unsigned char word8;<br />
typedef unsigned int word32;<br />
<br />
<br />
<br />
word8 Logtable[256] = {<br />
0, 0, 25, 1, 50, 2, 26, 198, 75, 199, 27, 104, 51, 238, 223, 3,<br />
100, 4, 224, 14, 52, 141, 129, 239, 76, 113, 8, 200, 248, 105, 28, 193,<br />
125, 194, 29, 181, 249, 185, 39, 106, 77, 228, 166, 114, 154, 201, 9, 120,<br />
101, 47, 138, 5, 33, 15, 225, 36, 18, 240, 130, 69, 53, 147, 218, 142,<br />
150, 143, 219, 189, 54, 208, 206, 148, 19, 92, 210, 241, 64, 70, 131, 56,<br />
102, 221, 253, 48, 191, 6, 139, 98, 179, 37, 226, 152, 34, 136, 145, 16,<br />
126, 110, 72, 195, 163, 182, 30, 66, 58, 107, 40, 84, 250, 133, 61, 186,<br />
43, 121, 10, 21, 155, 159, 94, 202, 78, 212, 172, 229, 243, 115, 167, 87,<br />
175, 88, 168, 80, 244, 234, 214, 116, 79, 174, 233, 213, 231, 230, 173, 232,<br />
44, 215, 117, 122, 235, 22, 11, 245, 89, 203, 95, 176, 156, 169, 81, 160,<br />
127, 12, 246, 111, 23, 196, 73, 236, 216, 67, 31, 45, 164, 118, 123, 183,<br />
204, 187, 62, 90, 251, 96, 177, 134, 59, 82, 161, 108, 170, 85, 41, 157,<br />
151, 178, 135, 144, 97, 190, 220, 252, 188, 149, 207, 205, 55, 63, 91, 209,<br />
83, 57, 132, 60, 65, 162, 109, 71, 20, 42, 158, 93, 86, 242, 211, 171,<br />
68, 17, 146, 217, 35, 32, 46, 137, 180, 124, 184, 38, 119, 153, 227, 165,<br />
103, 74, 237, 222, 197, 49, 254, 24, 13, 99, 140, 128, 192, 247, 112, 7,<br />
};<br />
<br />
word8 Alogtable[256] = {<br />
1, 3, 5, 15, 17, 51, 85, 255, 26, 46, 114, 150, 161, 248, 19, 53,<br />
95, 225, 56, 72, 216, 115, 149, 164, 247, 2, 6, 10, 30, 34, 102, 170,<br />
229, 52, 92, 228, 55, 89, 235, 38, 106, 190, 217, 112, 144, 171, 230, 49,<br />
83, 245, 4, 12, 20, 60, 68, 204, 79, 209, 104, 184, 211, 110, 178, 205,<br />
76, 212, 103, 169, 224, 59, 77, 215, 98, 166, 241, 8, 24, 40, 120, 136,<br />
131, 158, 185, 208, 107, 189, 220, 127, 129, 152, 179, 206, 73, 219, 118, 154,<br />
181, 196, 87, 249, 16, 48, 80, 240, 11, 29, 39, 105, 187, 214, 97, 163,<br />
254, 25, 43, 125, 135, 146, 173, 236, 47, 113, 147, 174, 233, 32, 96, 160,<br />
251, 22, 58, 78, 210, 109, 183, 194, 93, 231, 50, 86, 250, 21, 63, 65,<br />
195, 94, 226, 61, 71, 201, 64, 192, 91, 237, 44, 116, 156, 191, 218, 117,<br />
159, 186, 213, 100, 172, 239, 42, 126, 130, 157, 188, 223, 122, 142, 137, 128,<br />
155, 182, 193, 88, 232, 35, 101, 175, 234, 37, 111, 177, 200, 67, 197, 84,<br />
252, 31, 33, 99, 165, 244, 7, 9, 27, 45, 119, 153, 176, 203, 70, 202,<br />
69, 207, 74, 222, 121, 139, 134, 145, 168, 227, 62, 66, 198, 81, 243, 14,<br />
18, 54, 90, 238, 41, 123, 141, 140, 143, 138, 133, 148, 167, 242, 13, 23,<br />
57, 75, 221, 124, 132, 151, 162, 253, 28, 36, 108, 180, 199, 82, 246, 1,<br />
};<br />
<br />
word8 S[256] = {<br />
99, 124, 119, 123, 242, 107, 111, 197, 48, 1, 103, 43, 254, 215, 171, 118,<br />
202, 130, 201, 125, 250, 89, 71, 240, 173, 212, 162, 175, 156, 164, 114, 192,<br />
183, 253, 147, 38, 54, 63, 247, 204, 52, 165, 229, 241, 113, 216, 49, 21,<br />
4, 199, 35, 195, 24, 150, 5, 154, 7, 18, 128, 226, 235, 39, 178, 117,<br />
9, 131, 44, 26, 27, 110, 90, 160, 82, 59, 214, 179, 41, 227, 47, 132,<br />
83, 209, 0, 237, 32, 252, 177, 91, 106, 203, 190, 57, 74, 76, 88, 207,<br />
208, 239, 170, 251, 67, 77, 51, 133, 69, 249, 2, 127, 80, 60, 159, 168,<br />
81, 163, 64, 143, 146, 157, 56, 245, 188, 182, 218, 33, 16, 255, 243, 210,<br />
205, 12, 19, 236, 95, 151, 68, 23, 196, 167, 126, 61, 100, 93, 25, 115,<br />
96, 129, 79, 220, 34, 42, 144, 136, 70, 238, 184, 20, 222, 94, 11, 219,<br />
224, 50, 58, 10, 73, 6, 36, 92, 194, 211, 172, 98, 145, 149, 228, 121,<br />
231, 200, 55, 109, 141, 213, 78, 169, 108, 86, 244, 234, 101, 122, 174, 8,<br />
186, 120, 37, 46, 28, 166, 180, 198, 232, 221, 116, 31, 75, 189, 139, 138,<br />
112, 62, 181, 102, 72, 3, 246, 14, 97, 53, 87, 185, 134, 193, 29, 158,<br />
225, 248, 152, 17, 105, 217, 142, 148, 155, 30, 135, 233, 206, 85, 40, 223,<br />
140, 161, 137, 13, 191, 230, 66, 104, 65, 153, 45, 15, 176, 84, 187, 22,<br />
};<br />
<br />
word8 Si[256] = {<br />
82, 9, 106, 213, 48, 54, 165, 56, 191, 64, 163, 158, 129, 243, 215, 251,<br />
124, 227, 57, 130, 155, 47, 255, 135, 52, 142, 67, 68, 196, 222, 233, 203,<br />
84, 123, 148, 50, 166, 194, 35, 61, 238, 76, 149, 11, 66, 250, 195, 78,<br />
8, 46, 161, 102, 40, 217, 36, 178, 118, 91, 162, 73, 109, 139, 209, 37,<br />
114, 248, 246, 100, 134, 104, 152, 22, 212, 164, 92, 204, 93, 101, 182, 146,<br />
108, 112, 72, 80, 253, 237, 185, 218, 94, 21, 70, 87, 167, 141, 157, 132,<br />
144, 216, 171, 0, 140, 188, 211, 10, 247, 228, 88, 5, 184, 179, 69, 6,<br />
208, 44, 30, 143, 202, 63, 15, 2, 193, 175, 189, 3, 1, 19, 138, 107,<br />
58, 145, 17, 65, 79, 103, 220, 234, 151, 242, 207, 206, 240, 180, 230, 115,<br />
150, 172, 116, 34, 231, 173, 53, 133, 226, 249, 55, 232, 28, 117, 223, 110,<br />
71, 241, 26, 113, 29, 41, 197, 137, 111, 183, 98, 14, 170, 24, 190, 27,<br />
252, 86, 62, 75, 198, 210, 121, 32, 154, 219, 192, 254, 120, 205, 90, 244,<br />
31, 221, 168, 51, 136, 7, 199, 49, 177, 18, 16, 89, 39, 128, 236, 95,<br />
96, 81, 127, 169, 25, 181, 74, 13, 45, 229, 122, 159, 147, 201, 156, 239,<br />
160, 224, 59, 77, 174, 42, 245, 176, 200, 235, 187, 60, 131, 83, 153, 97,<br />
23, 43, 4, 126, 186, 119, 214, 38, 225, 105, 20, 99, 85, 33, 12, 125,<br />
};<br />
<br />
word32 RC[30] = {<br />
0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80,<br />
0x1b, 0x36, 0x6c, 0xd8, 0xab, 0x4d, 0x9a, 0x2f, 0x5e,<br />
0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a, 0xd4, 0xb3, 0x7d,<br />
0xfa, 0xef, 0xc5};<br />
<br />
#define MAXBC 8<br />
#define MAXKC 8<br />
#define MAXROUNDS 14<br />
<br />
static word8 shifts[5][4] = {<br />
0, 1, 2, 3,<br />
0, 1, 2, 3,<br />
0, 1, 2, 3,<br />
0, 1, 2, 4,<br />
0, 1, 3, 4};<br />
<br />
static int numrounds[5][5] = {<br />
10, 11, 12, 13, 14,<br />
11, 11, 12, 13, 14,<br />
12, 12, 12, 13, 14,<br />
13, 13, 13, 13, 14,<br />
14, 14, 14, 14, 14};<br />
<br />
int BC, KC, ROUNDS;<br />
<br />
word8 mul(word8 a, word8 b) {<br />
<br />
if (a && b)<br />
return Alogtable[(Logtable[a] + Logtable[b])%255];<br />
else return 0;<br />
}<br />
<br />
void AddRoundKey(word8 a[4][MAXBC], word8 rk[4][MAXBC])<br />
{<br />
<br />
<br />
int i, j;<br />
for (i=0; i<4; i++)<br />
for(j=0; j<4; j++)<br />
a[i][j] ^= rk[i][j];<br />
<br />
}<br />
<br />
void SubBytes(word8 a[4][MAXBC], word8 box[256])<br />
{<br />
<br />
int i, j;<br />
for (i=0; i<4; i++)<br />
for(j=0; j< BC; j++)<br />
a[i][j] = box[a[i][j]];<br />
}<br />
<br />
void ShiftRows(word8 a[4][MAXBC], word8 d)<br />
{<br />
<br />
word8 tmp[MAXBC];<br />
int i, j;<br />
<br />
if ( d==0)
{<br />
for (i=0; i<4; i++)<br />
{<br />
for(j=0; j< BC; j++)<br />
tmp[j] = a[i][(j + shifts[BC-4][i]) % BC];<br />
for(j=0; j< BC; j++)<br />
a[i][j] = tmp[j];<br />
}<br />
}<br />
else
{<br />
for (i=0; i<4; i++)<br />
{<br />
for(j=0; j< BC; j++)<br />
tmp[j] = a[i][(j + 4 - i) % BC];<br />
<br />
for(j=0; j< BC; j++)<br />
a[i][j] = tmp[j];<br />
}<br />
}<br />
<br />
}<br />
<br />
void MixColumns(word8 a[4][MAXBC]) {<br />
<br />
word8 b[4][MAXBC];<br />
int i, j;<br />
for(j=0; j for(i=0; i<4; i++)<br />
b[i][j] = mul(2,a[i][j])<br />
^ mul(3,a[(i+1)%4][j])<br />
^ a[(i+2) % 4][j]<br />
^ a[(i+3) % 4][j];<br />
for(i=0; i<4; i++)<br />
for(j=0; j< BC; j++)<br />
a[i][j] = b[i][j];<br />
}<br />
<br />
void InvMixColumns(word8 a[4][MAXBC])<br />
{<br />
<br />
word8 b[4][MAXBC];<br />
<br />
int i, j;<br />
<br />
for(j=0; j for(i=0; i<4; i++)<br />
b[i][j] = mul(0xe,a[i][j])<br />
^ mul(0xb,a[(i+1) % 4][j])<br />
^ mul(0xd,a[(i+2) % 4][j])<br />
^ mul(0x9,a[(i+3) % 4][j]);<br />
<br />
for(i=0; i<4; i++)<br />
for(j=0; j< BC; j++)<br />
a[i][j] = b[i][j];<br />
<br />
}<br />
<br />
int KeyExpansion (word8 k[4][MAXKC], word8 W[MAXROUNDS+1][4][MAXBC])<br />
{<br />
<br />
<br />
int i, j, t, RCpointer = 1;<br />
<br />
word8 tk[4][MAXKC];<br />
for(j=0; j< KC; j++)<br />
for (i=0; i<4; i++)<br />
tk[i][j] = k[i][j];<br />
t=0;<br />
<br />
for (j=0; (j<(rounds+1) *="" bc="" );="" j++,="" t++)for ( i=0; i<4; i++) W[t / BC][i][t % BC] = tk[i][j];<br />
while (t < (ROUNDS + 1)*BC) {<br />
<br />
for(i=0; i<4; i++)<br />
tk[i][0] ^= S[tk[(i+1)%4][KC-1]];<br />
tk[0][0] ^= RC[RCpointer++];<br />
if (KC <= 6 )<br />
for (j=1; j < KC; j++)<br />
for(i=0; i<4; i++)<br />
tk[i][j] ^= tk[i][j-1];<br />
else {<br />
for (j=1; j < 4; j++)<br />
for(i=0; i<4; i++)<br />
tk[i][j] ^= tk[i][j-1];<br />
for(i=0; i<4; i++) tk[i][4] ^= S[tk[i][3]];<br />
for (j=5; j < KC; j++)<br />
for(i=0; i<4; i++)<br />
tk[i][j] ^= tk[i][j-1];<br />
}<br />
<br />
for (j=0; (j < KC) && (t<(ROUNDS+1)*BC); j++, t++)<br />
for(i=0; i<4; i++) W[t/BC][i][t%BC] = tk[i][j];<br />
}<br />
return 0;<br />
}<br />
<br />
int Encrypt (word8 a[4][MAXBC], word8 rk[MAXROUNDS+1][4][MAXBC])<br />
{<br />
<br />
int r;<br />
<br />
<br />
sec_init();<br />
start_time = sec();<br />
<br />
AddRoundKey(a, rk[0]);<br />
<br />
stop_time = sec();<br />
Add1 = (stop_time - start_time);<br />
<br />
<br />
for ( r=1; r < ROUNDS; r++)<br />
{<br />
sec_init();<br />
start_time = sec();<br />
<br />
SubBytes (a,S);<br />
<br />
stop_time = sec();<br />
sub1 = (stop_time - start_time);<br />
<br />
sec_init();<br />
start_time = sec();<br />
<br />
ShiftRows(a,0);<br />
<br />
stop_time = sec();<br />
sft1 = (stop_time - start_time);<br />
<br />
sec_init();<br />
start_time = sec();<br />
<br />
MixColumns(a);<br />
<br />
stop_time = sec();<br />
mix1 = (stop_time - start_time);<br />
<br />
sec_init();<br />
start_time = sec();<br />
<br />
AddRoundKey(a,rk[r]);<br />
<br />
stop_time = sec();<br />
Add2 = (stop_time - start_time);<br />
}<br />
<br />
<br />
sec_init();<br />
start_time = sec();<br />
<br />
SubBytes (a,S);<br />
<br />
stop_time = sec();<br />
sub2 = (stop_time - start_time);<br />
<br />
sec_init();<br />
start_time = sec();<br />
<br />
ShiftRows(a,0);<br />
<br />
stop_time = sec();<br />
sft2 = (stop_time - start_time);<br />
<br />
sec_init();<br />
start_time = sec();<br />
<br />
AddRoundKey(a,rk[ROUNDS]);
<br />
stop_time = sec();<br />
Add3 = (stop_time - start_time);<br />
<br />
return 0;<br />
}<br />
<br />
int Decrypt (word8 a[4][MAXBC], word8 rk[MAXROUNDS+1][4][MAXBC])<br />
{<br />
int r;<br />
<br />
<br />
<br />
sec_init();<br />
start_time = sec();<br />
<br />
AddRoundKey(a, rk[ROUNDS]);
<br />
stop_time = sec();<br />
invadd1 = (stop_time - start_time);<br />
<br />
sec_init();<br />
start_time = sec();<br />
<br />
SubBytes(a, Si);<br />
<br />
stop_time = sec();<br />
invsub1 = (stop_time - start_time);<br />
<br />
sec_init();<br />
start_time = sec();<br />
<br />
ShiftRows(a,1);<br />
<br />
stop_time = sec();<br />
invsft1 = (stop_time - start_time);<br />
<br />
for ( r=ROUNDS-1; r > 0; r--)<br />
{<br />
sec_init();<br />
start_time = sec();<br />
<br />
AddRoundKey(a,rk[r]);<br />
<br />
stop_time = sec();<br />
invadd2 = (stop_time - start_time);<br />
<br />
sec_init();<br />
start_time = sec();<br />
<br />
InvMixColumns(a);<br />
<br />
stop_time = sec();<br />
invmix1 = (stop_time - start_time);<br />
<br />
sec_init();<br />
start_time = sec();<br />
<br />
SubBytes (a,Si);<br />
<br />
stop_time = sec();<br />
invsub2 = (stop_time - start_time);<br />
<br />
sec_init();<br />
start_time = sec();<br />
<br />
ShiftRows(a,1);<br />
<br />
stop_time = sec();<br />
invsft2 = (stop_time - start_time);<br />
}<br />
<br />
<br />
sec_init();<br />
start_time = sec();<br />
<br />
AddRoundKey(a,rk[0]);<br />
<br />
stop_time = sec();<br />
invadd3 = (stop_time - start_time);<br />
<br />
return 0;<br />
}<br />
<br />
int counter1()<br />
{<br />
count1++;<br />
return 0;<br />
}<br />
<br />
int counter2()<br />
{<br />
count2++;<br />
return 0;<br />
}<br />
<br />
int main()<br />
{<br />
<br />
int i, j;<br />
<br />
int Nr=0;<br />
<br />
double Add,sub,sft,mix;
double invadd,invsub,invsft,invmix;
double keysh_time;
double encryptTime,decryptTime;<br />
<br />
<br />
word8 a[4][MAXBC], rk[MAXROUNDS+1][4][MAXBC], sk[4][MAXKC];<br />
BC = 4;<br />
<br />
<br />
printf("\n --- Advanced Encryption Standard --- \n");<br />
printf("\n\n");<br />
<br />
while(Nr!=128 && Nr!=192 && Nr!=256)<br />
{<br />
printf("Enter the length of Key(128, 192 or 256 only): ");<br />
scanf("%d",&Nr);<br />
}<br />
<br />
KC = Nr / 32;<br />
<br />
{<br />
<br />
ROUNDS = numrounds[KC-4][BC-4];<br />
<br />
cout<<endl;<br />
<br />
char key;<br />
ifstream myfile2 ("Key.txt");<br />
if (myfile2.is_open())<br />
{<br />
for ( j=0; j for ( i=0; i < 4; i++)<br />
{<br />
myfile2.get(key);<br />
sk[i][j] = key;
}<br />
<br />
myfile2.close();<br />
}<br />
else<br />
cout << "Unable to open file";<br />
<br />
sec_init();<br />
start_time = sec();<br />
<br />
KeyExpansion (sk, rk);<br />
<br />
stop_time = sec();<br />
keysh_time = (stop_time - start_time);<br />
<br />
char d;<br />
ifstream myfile1 ("myfile1.txt");<br />
ofstream myfile3 ("Ciphertext.txt");<br />
<br />
myfile1.get(d);
<br />
while(!myfile1.eof())<br />
{<br />
for ( j=0; j for ( i=0; i < 4; i++)<br />
{<br />
a[i][j] = d;
myfile1.get(d);
}<br />
<br />
<br />
Encrypt(a, rk);<br />
counter1();<br />
<br />
<br />
if (myfile3.is_open())<br />
{<br />
for(j=0; j< BC; j ++)<br />
for ( i=0; i<4; i++)<br />
myfile3<<a[i][j];<br />
}<br />
else<br />
cout << "Unable to open file";<br />
}<br />
<br />
myfile3.close();<br />
myfile1.close();<br />
<br />
char dxc;<br />
ifstream myfile4 ("Ciphertext.txt");<br />
ofstream myfile5 ("Text.txt");<br />
<br />
myfile4.get(dxc);
<br />
while(!myfile4.eof())<br />
{<br />
for ( j=0; j for ( i=0; i < 4; i++)<br />
{<br />
a[i][j] = dxc;
myfile4.get(dxc);
}<br />
<br />
<br />
Decrypt(a, rk);<br />
counter2();<br />
<br />
<br />
if (myfile5.is_open())<br />
{<br />
for(j=0; j for ( i=0; i<4; i++)<br />
myfile5<<a[i][j];<br />
}<br />
else<br />
cout << "Unable to open file";<br />
}<br />
<br />
myfile5.close();<br />
myfile4.close();<br />
<br />
<br />
cout<<endl;<br />
cout<<" *********** AES Encryption using "<<Nr<<" bits"<<" ********** "<<endl;<br />
cout<<endl;<br />
<br />
cout<<"Key : ";<br />
for(j=0; j< KC; j ++)<br />
for ( i=0; i<4; i++)<br />
cout<<sk[i][j];<br />
cout<<endl;<br />
<br />
cout<<endl;<br />
<br />
cout<<" ----- AES Encryption Time for 1 Operation ----- "<<endl<<endl;<br />
<br />
<br />
Add = (Add1 + Add2*(ROUNDS-1) + Add3)*count1;<br />
sub = (sub1*(ROUNDS-1) + sub2)*count1;<br />
sft = (sft1*(ROUNDS-1) + sft2)*count1;<br />
mix = (mix1*(ROUNDS-1))*count1;<br />
<br />
encryptTime = Add + sub + sft + mix;<br />
<br />
printf("Key Expansion Time : ");<br />
printf("%lf ", keysh_time);<br />
printf("seconds.");<br />
printf("\n\n");<br />
<br />
printf("AddRoundKey Time : ");<br />
printf("%lf ", Add);<br />
printf("seconds.");<br />
printf("\n\n");<br />
<br />
printf("SubBytes Time : ");<br />
printf("%lf ", sub);<br />
printf("seconds.");<br />
printf("\n\n");<br />
<br />
printf("ShiftRow Time : ");<br />
printf("%lf ", sft);<br />
printf("seconds.");<br />
printf("\n\n");<br />
<br />
printf("MixColunms Time : ");<br />
printf("%lf ", mix);<br />
printf("seconds.");<br />
printf("\n\n");<br />
<br />
printf("Encrytion Time : ");<br />
printf("%lf ", encryptTime);<br />
printf("seconds.");<br />
printf("\n\n");<br />
<br />
cout<<"Number of plaintext blocks of 16 bytes created: "<<count1<<endl;<br />
<br />
cout<<endl;<br />
cout<<" *********** AES Decryption using "<<Nr<<" bits"<<" ********** "<<endl;<br />
cout<<endl;<br />
<br />
cout<<"Key : ";<br />
for(j=0; j< KC; j ++)<br />
for ( i=0; i<4; i++)<br />
cout<<sk[i][j];<br />
cout<<endl;<br />
}<br />
<br />
invadd = (invadd1 + invadd2*(ROUNDS-1) + invadd3)*count2;<br />
invsub = (invsub1 + invsub2*(ROUNDS-1))*count2;<br />
invsft = (invsft1 + invsft2*(ROUNDS-1))*count2;<br />
invmix = (invmix1*(ROUNDS-1))*count2;<br />
<br />
decryptTime = invadd + invsub + invsft + invmix;<br />
<br />
cout<<endl;<br />
<br />
cout<<" ----- Average AES Decryption Time for 1 Operation ----- "<<endl<<endl;<br />
<br />
printf("Key Expansion Time : ");<br />
printf("%lf ", keysh_time);<br />
printf("seconds.");<br />
printf("\n\n");<br />
<br />
printf("AddRoundKey Time : ");<br />
printf("%lf ", invadd);<br />
printf("seconds.");<br />
printf("\n\n");<br />
<br />
printf("Inverse SubBytes Time : ");<br />
printf("%lf ", invsub);<br />
printf("seconds.");<br />
printf("\n\n");<br />
<br />
printf("Inverse ShiftRow Time : ");<br />
printf("%lf ", invsft);<br />
printf("seconds.");<br />
printf("\n\n");<br />
<br />
printf("Inverse MixColunms Time : ");<br />
printf("%lf ", invmix);<br />
printf("seconds.");<br />
printf("\n\n");<br />
<br />
printf("Decrytion Time : ");<br />
printf("%lf ", decryptTime);<br />
printf("seconds.");<br />
printf("\n\n");<br />
<br />
cout<<"Number of plaintext blocks of 16 bytes created: "<<count2<<endl;<br />
<br />
printf("\n\n\t\t End of the program\n\n");<br />
<br />
return 0;<br />
}<br />
key.txt:- 0123456789abcdef0123456789abcdef
myfile1.txt:- its the pixels values
Please help me out how to solve this problem
modified on Sunday, February 24, 2008 2:36 PM
|
|
|
|
|
This is probably unrelated but the last time I checked, C/C++ was case sensitive.
Are you really getting this to compile? Some global variables are declared all caps then used locally in lowercase with no matching declaration so I'm guessing your referring to the global instance.
one example is...
int BC, KC, ROUNDS;
// Used as lowercase in some functions
bc
rounds
|
|
|
|
|
/*
I had a few spare minutes so I gave it look. I removed
all the noise and cleaned it up a bit so I could
navigate it easily.
NOTE: Files renamed to...
key.txt
input.txt
encrypted.txt
output.txt
WARNING: You might have a problem toward the very end
of the encrypt or decrypt code. ---------------->
-13224404 -14211046 ... -2885500 -3082625 -33457977777
*/
#include <iostream.h>
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#include <windows.h>
#include <string.h>
#include <memory.h>
#include <process.h>
#include <tchar.h>
#include <dos.h>
#include <conio.h>
#include <fstream>
#include <string>
#include <time.h>
using namespace std;
double Add,sub,sft,mix;
double Add1,Add2,Add3,sub1,sub2,sft1,sft2,mix1;
double invadd1,invadd2,invadd3,invsub1,invsub2,invsft1,invsft2,invmix1;
typedef unsigned char word8;
typedef unsigned int word32;
word8 Logtable[256] = {
0, 0, 25, 1, 50, 2, 26, 198, 75, 199, 27, 104, 51, 238, 223, 3,
100, 4, 224, 14, 52, 141, 129, 239, 76, 113, 8, 200, 248, 105, 28, 193,
125, 194, 29, 181, 249, 185, 39, 106, 77, 228, 166, 114, 154, 201, 9, 120,
101, 47, 138, 5, 33, 15, 225, 36, 18, 240, 130, 69, 53, 147, 218, 142,
150, 143, 219, 189, 54, 208, 206, 148, 19, 92, 210, 241, 64, 70, 131, 56,
102, 221, 253, 48, 191, 6, 139, 98, 179, 37, 226, 152, 34, 136, 145, 16,
126, 110, 72, 195, 163, 182, 30, 66, 58, 107, 40, 84, 250, 133, 61, 186,
43, 121, 10, 21, 155, 159, 94, 202, 78, 212, 172, 229, 243, 115, 167, 87,
175, 88, 168, 80, 244, 234, 214, 116, 79, 174, 233, 213, 231, 230, 173, 232,
44, 215, 117, 122, 235, 22, 11, 245, 89, 203, 95, 176, 156, 169, 81, 160,
127, 12, 246, 111, 23, 196, 73, 236, 216, 67, 31, 45, 164, 118, 123, 183,
204, 187, 62, 90, 251, 96, 177, 134, 59, 82, 161, 108, 170, 85, 41, 157,
151, 178, 135, 144, 97, 190, 220, 252, 188, 149, 207, 205, 55, 63, 91, 209,
83, 57, 132, 60, 65, 162, 109, 71, 20, 42, 158, 93, 86, 242, 211, 171,
68, 17, 146, 217, 35, 32, 46, 137, 180, 124, 184, 38, 119, 153, 227, 165,
103, 74, 237, 222, 197, 49, 254, 24, 13, 99, 140, 128, 192, 247, 112, 7,
};
word8 Alogtable[256] = {
1, 3, 5, 15, 17, 51, 85, 255, 26, 46, 114, 150, 161, 248, 19, 53,
95, 225, 56, 72, 216, 115, 149, 164, 247, 2, 6, 10, 30, 34, 102, 170,
229, 52, 92, 228, 55, 89, 235, 38, 106, 190, 217, 112, 144, 171, 230, 49,
83, 245, 4, 12, 20, 60, 68, 204, 79, 209, 104, 184, 211, 110, 178, 205,
76, 212, 103, 169, 224, 59, 77, 215, 98, 166, 241, 8, 24, 40, 120, 136,
131, 158, 185, 208, 107, 189, 220, 127, 129, 152, 179, 206, 73, 219, 118, 154,
181, 196, 87, 249, 16, 48, 80, 240, 11, 29, 39, 105, 187, 214, 97, 163,
254, 25, 43, 125, 135, 146, 173, 236, 47, 113, 147, 174, 233, 32, 96, 160,
251, 22, 58, 78, 210, 109, 183, 194, 93, 231, 50, 86, 250, 21, 63, 65,
195, 94, 226, 61, 71, 201, 64, 192, 91, 237, 44, 116, 156, 191, 218, 117,
159, 186, 213, 100, 172, 239, 42, 126, 130, 157, 188, 223, 122, 142, 137, 128,
155, 182, 193, 88, 232, 35, 101, 175, 234, 37, 111, 177, 200, 67, 197, 84,
252, 31, 33, 99, 165, 244, 7, 9, 27, 45, 119, 153, 176, 203, 70, 202,
69, 207, 74, 222, 121, 139, 134, 145, 168, 227, 62, 66, 198, 81, 243, 14,
18, 54, 90, 238, 41, 123, 141, 140, 143, 138, 133, 148, 167, 242, 13, 23,
57, 75, 221, 124, 132, 151, 162, 253, 28, 36, 108, 180, 199, 82, 246, 1,
};
word8 S[256] = {
99, 124, 119, 123, 242, 107, 111, 197, 48, 1, 103, 43, 254, 215, 171, 118,
202, 130, 201, 125, 250, 89, 71, 240, 173, 212, 162, 175, 156, 164, 114, 192,
183, 253, 147, 38, 54, 63, 247, 204, 52, 165, 229, 241, 113, 216, 49, 21,
4, 199, 35, 195, 24, 150, 5, 154, 7, 18, 128, 226, 235, 39, 178, 117,
9, 131, 44, 26, 27, 110, 90, 160, 82, 59, 214, 179, 41, 227, 47, 132,
83, 209, 0, 237, 32, 252, 177, 91, 106, 203, 190, 57, 74, 76, 88, 207,
208, 239, 170, 251, 67, 77, 51, 133, 69, 249, 2, 127, 80, 60, 159, 168,
81, 163, 64, 143, 146, 157, 56, 245, 188, 182, 218, 33, 16, 255, 243, 210,
205, 12, 19, 236, 95, 151, 68, 23, 196, 167, 126, 61, 100, 93, 25, 115,
96, 129, 79, 220, 34, 42, 144, 136, 70, 238, 184, 20, 222, 94, 11, 219,
224, 50, 58, 10, 73, 6, 36, 92, 194, 211, 172, 98, 145, 149, 228, 121,
231, 200, 55, 109, 141, 213, 78, 169, 108, 86, 244, 234, 101, 122, 174, 8,
186, 120, 37, 46, 28, 166, 180, 198, 232, 221, 116, 31, 75, 189, 139, 138,
112, 62, 181, 102, 72, 3, 246, 14, 97, 53, 87, 185, 134, 193, 29, 158,
225, 248, 152, 17, 105, 217, 142, 148, 155, 30, 135, 233, 206, 85, 40, 223,
140, 161, 137, 13, 191, 230, 66, 104, 65, 153, 45, 15, 176, 84, 187, 22,
};
word8 Si[256] = {
82, 9, 106, 213, 48, 54, 165, 56, 191, 64, 163, 158, 129, 243, 215, 251,
124, 227, 57, 130, 155, 47, 255, 135, 52, 142, 67, 68, 196, 222, 233, 203,
84, 123, 148, 50, 166, 194, 35, 61, 238, 76, 149, 11, 66, 250, 195, 78,
8, 46, 161, 102, 40, 217, 36, 178, 118, 91, 162, 73, 109, 139, 209, 37,
114, 248, 246, 100, 134, 104, 152, 22, 212, 164, 92, 204, 93, 101, 182, 146,
108, 112, 72, 80, 253, 237, 185, 218, 94, 21, 70, 87, 167, 141, 157, 132,
144, 216, 171, 0, 140, 188, 211, 10, 247, 228, 88, 5, 184, 179, 69, 6,
208, 44, 30, 143, 202, 63, 15, 2, 193, 175, 189, 3, 1, 19, 138, 107,
58, 145, 17, 65, 79, 103, 220, 234, 151, 242, 207, 206, 240, 180, 230, 115,
150, 172, 116, 34, 231, 173, 53, 133, 226, 249, 55, 232, 28, 117, 223, 110,
71, 241, 26, 113, 29, 41, 197, 137, 111, 183, 98, 14, 170, 24, 190, 27,
252, 86, 62, 75, 198, 210, 121, 32, 154, 219, 192, 254, 120, 205, 90, 244,
31, 221, 168, 51, 136, 7, 199, 49, 177, 18, 16, 89, 39, 128, 236, 95,
96, 81, 127, 169, 25, 181, 74, 13, 45, 229, 122, 159, 147, 201, 156, 239,
160, 224, 59, 77, 174, 42, 245, 176, 200, 235, 187, 60, 131, 83, 153, 97,
23, 43, 4, 126, 186, 119, 214, 38, 225, 105, 20, 99, 85, 33, 12, 125,
};
word32 RC[30] = {
0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80,
0x1b, 0x36, 0x6c, 0xd8, 0xab, 0x4d, 0x9a, 0x2f, 0x5e,
0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a, 0xd4, 0xb3, 0x7d,
0xfa, 0xef, 0xc5
};
#define MAXBC 8
#define MAXKC 8
#define MAXROUNDS 14
static word8 shifts[5][4] = {
0, 1, 2, 3,
0, 1, 2, 3,
0, 1, 2, 3,
0, 1, 2, 4,
0, 1, 3, 4
};
static int numrounds[5][5] = {
10, 11, 12, 13, 14,
11, 11, 12, 13, 14,
12, 12, 12, 13, 14,
13, 13, 13, 13, 14,
14, 14, 14, 14, 14
};
int BC, KC, ROUNDS;
word8 mul(word8 a, word8 b) {
if (a && b) {
return Alogtable[(Logtable[a] + Logtable[b])%255];
} else {
return 0;
}
}
void AddRoundKey(word8 a[4][MAXBC], word8 rk[4][MAXBC])
{
int i, j;
for (i=0; i<4; i++) {
for(j=0; j<4; j++) {
a[i][j] ^= rk[i][j];
}
}
}
void SubBytes(word8 a[4][MAXBC], word8 box[256])
{
int i, j;
for (i=0; i<4; i++) {
for(j=0; j< BC; j++) {
a[i][j] = box[a[i][j]];
}
}
}
void ShiftRows(word8 a[4][MAXBC], word8 d)
{
word8 tmp[MAXBC];
int i, j;
if ( d==0) {
for (i=0; i<4; i++) {
for(j=0; j< BC; j++) {
tmp[j] = a[i][(j + shifts[BC-4][i]) % BC];
}
for(j=0; j< BC; j++) {
a[i][j] = tmp[j];
}
}
} else { // for ShiftRows-decryption
for (i=0; i<4; i++) {
for(j=0; j< BC; j++) {
tmp[j] = a[i][(j + 4 - i) % BC];
}
for(j=0; j< BC; j++) {
a[i][j] = tmp[j];
}
}
}
}
void MixColumns(word8 a[4][MAXBC]) {
word8 b[4][MAXBC];
int i, j;
for(j=0; j<BC; j++) {
for(i=0; i<4; i++) {
b[i][j] = mul(2,a[i][j])
^ mul(3,a[(i+1)%4][j])
^ a[(i+2) % 4][j]
^ a[(i+3) % 4][j];
}
}
for(i=0; i<4; i++) {
for(j=0; j< BC; j++) {
a[i][j] = b[i][j];
}
}
}
void InvMixColumns(word8 a[4][MAXBC])
{
word8 b[4][MAXBC];
int i, j;
for(j=0; j<BC; j++) {
for(i=0; i<4; i++) {
b[i][j] = mul(0xe,a[i][j])
^ mul(0xb,a[(i+1) % 4][j])
^ mul(0xd,a[(i+2) % 4][j])
^ mul(0x9,a[(i+3) % 4][j]);
}
}
for(i=0; i<4; i++) {
for(j=0; j< BC; j++) {
a[i][j] = b[i][j];
}
}
}
int KeyExpansion (word8 k[4][MAXKC], word8 W[MAXROUNDS+1][4][MAXBC])
{
int i, j, t, RCpointer = 1;
word8 tk[4][MAXKC];
for(j=0; j< KC; j++) {
for (i=0; i<4; i++) {
tk[i][j] = k[i][j];
}
}
t=0;
for (j=0; (j<KC) && (t<(ROUNDS+1) * BC); j++, t++) {
for ( i=0; i<4; i++) {
W[t / BC][i][t % BC] = tk[i][j];
}
}
while (t < (ROUNDS + 1)*BC) {
for(i=0; i<4; i++) {
tk[i][0] ^= S[tk[(i+1)%4][KC-1]];
}
tk[0][0] ^= RC[RCpointer++];
if (KC <= 6 ) {
for (j=1; j < KC; j++) {
for(i=0; i<4; i++) {
tk[i][j] ^= tk[i][j-1];
}
}
} else {
for (j=1; j < 4; j++) {
for(i=0; i<4; i++) {
tk[i][j] ^= tk[i][j-1];
}
}
for(i=0; i<4; i++) {
tk[i][4] ^= S[tk[i][3]];
}
for (j=5; j < KC; j++) {
for(i=0; i<4; i++) {
tk[i][j] ^= tk[i][j-1];
}
}
}
for (j=0; (j < KC) && (t<(ROUNDS+1)*BC); j++, t++) {
for(i=0; i<4; i++) W[t/BC][i][t%BC] = tk[i][j];
}
}
return 0;
}
int Encrypt (word8 a[4][MAXBC], word8 rk[MAXROUNDS+1][4][MAXBC])
{
int r;
AddRoundKey(a, rk[0]);
for ( r=1; r < ROUNDS; r++) {
SubBytes (a,S);
ShiftRows(a,0);
MixColumns(a);
AddRoundKey(a,rk[r]);
}
SubBytes (a,S);
ShiftRows(a,0);
AddRoundKey(a,rk[ROUNDS]);//round
return 0;
}
int Decrypt (word8 a[4][MAXBC], word8 rk[MAXROUNDS+1][4][MAXBC])
{
int r;
AddRoundKey(a, rk[ROUNDS]);//round
SubBytes(a, Si);
ShiftRows(a,1);
for ( r=ROUNDS-1; r > 0; r--) {
AddRoundKey(a,rk[r]);
InvMixColumns(a);
SubBytes (a,Si);
ShiftRows(a,1);
}
AddRoundKey(a,rk[0]);
return 0;
}
int main()
{
int i, j;
int Nr=0;
word8 a[4][MAXBC], rk[MAXROUNDS+1][4][MAXBC], sk[4][MAXKC];
BC = 4;
while (Nr!=128 && Nr!=192 && Nr!=256) {
printf("Enter the length of Key(128, 192 or 256 only): ");
scanf("%d",&Nr);
}
KC = Nr / 32;
ROUNDS = numrounds[KC-4][BC-4];
cout<<endl;
char key;
ifstream fileKey ("key.txt");
if (fileKey.is_open()) {
for ( j=0; j<KC; j++) {
for ( i=0; i < 4; i++) {
fileKey.get(key);
sk[i][j] = key;
}
}
fileKey.close();
} else {
cout << "Unable to open file";
}
KeyExpansion (sk, rk);
{ // Encrypting the data
char d;
ifstream fileInput ("input.txt");
ofstream fileEncrypted ("encrypted.txt");
fileInput.get(d);
while(!fileInput.eof()) {
for ( j=0; j<BC; j++) {
for ( i=0; i < 4; i++) {
a[i][j] = d;
fileInput.get(d);
}
}
Encrypt(a, rk);
if (fileEncrypted.is_open()) {
for(j=0; j< BC; j ++) {
for ( i=0; i<4; i++) {
fileEncrypted<<a[i][j];
}
}
} else {
cout << "Unable to open file";
}
}
fileEncrypted.close();
fileInput.close();
}
{ // Decrypting the data
char dxc;
ifstream fileEncrypted ("encrypted.txt");
ofstream fileOutput ("output.txt");
fileEncrypted.get(dxc); //priming read
while(!fileEncrypted.eof()) {
for ( j=0; j<BC; j++) {
for ( i=0; i < 4; i++) {
a[i][j] = dxc;
fileEncrypted.get(dxc);
}
}
Decrypt(a, rk);
if (fileOutput.is_open()) {
for(j=0; j<BC; j++) {
for ( i=0; i<4; i++) {
fileOutput<<a[i][j];
}
}
} else {
cout << "Unable to open file";
}
}
cout<<endl;
fileOutput.close();
fileEncrypted.close();
}
return 0;
}
|
|
|
|
|
Now why on earth would someone vote someone down for trying to help.
Now, if the implementation the OP provided for the encryption algorithm is wrong, that's out of my hands. They wanted the code to complete the process and it does.
|
|
|
|
|
Iam giving you 5 stars for your exceptional patience on reviewing such a long message. but it seems some priority member given you 1 star (total 5 + 1 stars / 2 votes = 1.8)
|
|
|
|
|
Rajkumar R wrote: (total 5 + 1 stars / 2 votes = 1.8)
Add my 5 ...
Now 3.2.
Maxwell Chen
|
|
|
|
|
that encourages.
|
|
|
|
|
Added my 5
Were up to 3.77
codito ergo sum
|
|
|
|
|
|
Hello,
I have a problem regarding a CTreeCtrl derived class. I have added a message handler for WM_CREATE:
int CMyTreeCtrl::OnCreate(LPCREATESTRUCT lpCreateStruct)
I placed a CTreeCtrl item on the dialog in the resource aditor and afterwards I have change the class from CTreeCtrl to CMyTreeCtrl. This works.
But the problem is, that the OnCreate member function is never called...
What did I miss?
Regards
MM
|
|
|
|
|
Have you associated CMyTreeCtrl object with item placed on dialog in editor ?
Prasad
MS MVP - VC++
|
|
|
|
|
Yes, I have done this in the header file:
<br />
enum { IDD = IDD_MY_MGR_DLG };<br />
CMyTreeCtrl m_treeCtrl2;<br />
The object is created and I can call other functions I have added to CMyTreeCtrl.
When I create the object manually without a dialog resource it works:
<br />
m_treeCtrl2.Create(WS_CHILD|WS_VISIBLE|WS_BORDER|TVS_HASLINES|TVS_LINESATROOT|TVS_HASBUTTONS|TVS_TRACKSELECT|TVS_SHOWSELALWAYS, rect, this, 1234);<br />
But I don't want to create all objects manually, I want to use the resource editor to do this.
|
|
|
|
|
When I said "assoicated", it means using DDX_ macro. You need to use dialog data exchange macros to associated dialong control with class variable.
Prasad
MS MVP - VC++
|
|
|
|
|
Yes, I forgot to mention this. My code looks like this:
<br />
void CMyMgrDlg::DoDataExchange(CDataExchange* pDX)<br />
{<br />
CDialog::DoDataExchange(pDX);<br />
DDX_Control(pDX, IDC_CHAIN_TREE, m_treeCtrl2);<br />
}<br />
<br />
I have edited nothing here. This code was generated automatically.
Regards
|
|
|
|
|
This isn't going to work.
The control in a dialog resource template is created before you get a chance
to catch the WM_CREATE for the control, which ends up going to the default window
procedure for the control class.
DDX isn't going to help either, since the first DDX operation done is subclassing the control,
which is done way after the control is created.
You have two options AFAIK -
1) Create a custom window class which wraps the windows control window class. This class needs
to be registered with Windows. The control on the dialog resource needs to be this type/class.
Then your window proc will get called for the control before you pass messages on to the control's
window proc. This would be window superclassing.
2) Create the control at runtime instead of letting Windows create it from the dialog template.
Note that whatever you need to do in this WM_CREATE handler, you may be able to do in the
dialog class' OnInitDialog(), which is easier than either of the options above.
Mark
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|
|