XOR加密数据包无法正确解密 [英] XOR Encryption Packets not decrypting properly

查看:61
本文介绍了XOR加密数据包无法正确解密的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我做了一个简单的XOR加密来加密一些数据包,但是解密效果不好......因为我是C ++的初学者,请帮助我...



 unsigned char cheimagice [] = {0xCF,0x10,0x4E,0x3A,0xC2,0xD8,0x5F,0xAD,0xE4}; 
unsigned char test [] = {0xC3,0x18,0xC7,0xBE,0x08,0x1B,0x25,0xFF,0x81,0x55,0xE0,0xB5};
printf([Criptare]:\ n);
printf([INAINTE]:0x%02hX 0x%02hX 0x%02hX 0x%02hX 0x%02hX 0x%02hX 0x%02hX 0x%02hX 0x%02hX 0x%02hX 0x%02hX 0x%02hX \ n ,(unsigned char)test [0],(unsigned char)test [1],(unsigned char)test [2],(unsigned char)test [3],(unsigned char)test [4],(unsigned char) )test [5],(unsigned char)test [6],(unsigned char)test [7],(unsigned char)test [8],(unsigned char)test [9],(unsigned char)test [10] ,(unsigned char)test [11]);
unsigned char * test1 = new unsigned char [sizeof(test)];
unsigned char * test2 = new unsigned char [sizeof(test)];
// criptare :)
for(unsigned int i = 0; i< sizeof(test); ++ i)
{
test1 [i] ^ = test [我 - 1] ^ cheimagice [i%9];
}
printf([DUPA]:0x%02hX 0x%02hX 0x%02hX 0x%02hX 0x%02hX 0x%02hX 0x%02hX 0x%02hX 0x%02hX 0x%02hX 0x%02hX 0x %02hX \ n,(unsigned char)test1 [0],(unsigned char)test1 [1],(unsigned char)test1 [2],(unsigned char)test1 [3],(unsigned char)test1 [4 ],(unsigned char)test1 [5],(unsigned char)test1 [6],(unsigned char)test1 [7],(unsigned char)test1 [8],(unsigned char)test1 [9],(unsigned char) )test1 [10],(unsigned char)test1 [11]);
// decriptare :)
printf([Decriptare]:\ n);
printf([INAINTE]:0x%02hX 0x%02hX 0x%02hX 0x%02hX 0x%02hX 0x%02hX 0x%02hX 0x%02hX 0x%02hX 0x%02hX 0x%02hX 0x%02hX \ n ,(unsigned char)test1 [0],(unsigned char)test1 [1],(unsigned char)test1 [2],(unsigned char)test1 [3],(unsigned char)test1 [4],(unsigned char) )test1 [5],(unsigned char)test1 [6],(unsigned char)test1 [7],(unsigned char)test1 [8],(unsigned char)test1 [9],(unsigned char)test1 [10] ,(unsigned char)test1 [11]);
for(unsigned int i = 0; i< sizeof(test1); ++ i)
{
test2 [i] ^ = test1 [i - 1] ^ cheimagice [i% 9];
}
printf([DUPA]:0x%02hX 0x%02hX 0x%02hX 0x%02hX 0x%02hX 0x%02hX 0x%02hX 0x%02hX 0x%02hX 0x%02hX 0x%02hX 0x %02hX \ n,(unsigned char)test2 [0],(unsigned char)test2 [1],(unsigned char)test2 [2],(unsigned char)test2 [3],(unsigned char)test2 [4 ],(unsigned char)test2 [5],(unsigned char)test2 [6],(unsigned char)test2 [7],(unsigned char)test2 [8],(unsigned char)test2 [9],(unsigned char )test2 [10],(unsigned char)test2 [11]);





输出:



 [Criptare]:
[INAINTE]:0xC3 0x18 0xC7 0xBE 0x08 0x1B 0x25 0xFF 0x81 0x55 0xE0 0xB5
[DUPA]:0xE3 0xD3 0x6C 0xFD 0x11 0xD0 0x29 0x88 0x21 0x4E 0x36 0xAE
[Decriptare]:
[INAINTE]:0xE3 0xD3 0x6C 0xFD 0x11 0xD0 0x29 0x88 0x21 0x4E 0x36 0xAE
[DUPA]:0x6C 0xF3 0x9D 0x56 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00

解决方案

为什么要尝试解决输入数组下限之外的值?

这里

  for  unsigned   int  i =  0 ; i<  sizeof (test); ++ i )
{
test1 [i] ^ = test [i - 1 ] ^ cheimagice [i% 9 ];
}



和这里

  for  unsigned   int  i =  0 ; i<  sizeof (test1); ++ i)
{
test2 [i] ^ = test1 [i - 1 ] ^ cheimagice [i% 9 ];
}



范围应该是什么?这应该也会触发内存冲突异常。此外,Xoring目的地的内容无助于获得结果。

我修复了代码:

  unsigned   char  cheimagice [] = {0xCF,0x10,0x4E,0x3A,0xC2,0xD8,0x5F,0xAD,0xE4}; 
unsigned char test [] = {0xC3,0x18,0xC7,0xBE,0x08,0x1B ,0x25,0xFF,0x81,0x55,0xE0,0xB5};
printf( [Criptare]:\ n);
printf( [INAINTE]:0x%02hX 0x%02hX 0x%02hX 0x%02hX 0x%02hX 0x%02hX 0x%02hX 0x%02hX 0x%02hX 0x%02hX 0x%02hX 0x%02hX \ n,( unsigned char )test [ 0 ],( unsigned char )test [ 1 ],( unsigned char )test [ 2 ],( unsigned < span class =code-keyword> char )test [ 3 ],( unsigned char )test [ 4 ],( unsigned char )test [ 5 ],( unsigned char )test [ 6 ],( unsigned char )test [ 7 ],( unsigned char )test [ 8 ],( unsigned char )test [ 9 ],( unsigned < span class =code-keyword> char )test [ 10 ],( unsigned char )test [ 11 ]);
unsigned char * test1 = new unsigned char [ sizeof (test )];
unsigned char * test2 = new unsigned char [ sizeof (test )];
// criptare:)
for unsigned int i = 0 ; i< sizeof (test); ++ i)
{
test1 [i] = test [i] ^ cheimagice [i% 9 ];
}
printf( [DUPA]:0x%02hX 0x%02hX 0x%02hX 0x %02hX 0x%02hX 0x%02hX 0x%02hX 0x%02hX 0x%02hX 0x%02hX 0x%02hX 0x%02hX \ n,( unsigned char )test1 [ 0 ],( unsigned char )test1 [ 1 ],( unsigned char )test1 [ 2 ],( unsigned char )test1 [ 3 ],( unsigned char )test1 [ 4 ],( unsigned char )test1 [ 5 ],(未签名 char )test1 [ 6 ],( unsigned char )test1 [ 7 ],( unsigned char )test1 [ 8 ],( unsigned char )test1 [ 9 ],( unsigned char )test1 [ 10 ],( unsigned char )test1 [ 11 ]);
// decriptare:)
printf( [Decriptare]:\ n);
printf( [INAINTE]:0x%02hX 0x%02hX 0x%02hX 0x%02hX 0x%02hX 0x%02hX 0x%02hX 0x%02hX 0x%02hX 0x%02hX 0x%02hX 0x%02hX \ n,( unsigned char )test1 [ 0 ],( unsigned char )test1 [ 1 ],( unsigned char )test1 [ 2 ],( unsigned < span class =code-keyword> char )test1 [ 3 ],( unsigned char )test1 [ 4 ],( unsigned char )test1 [ 5 ],( unsigned char )test1 [ 6 ],( unsigned < span class =code-keyword> char )test1 [ 7 ],( unsigned char )test1 [ 8 ],( unsigned char )test1 [ 9 ],( unsigned char )test1 [ 10 ],( unsigned char )test1 [ 11 ]);
for unsigned int i = 0 ; i< sizeof (test1); ++ i)
{
test2 [i] = test1 [i] ^ cheimagice [i% 9 ];
}
printf( [DUPA]:0x%02hX 0x%02hX 0x%02hX 0x %02hX 0x%02hX 0x%02hX 0x%02hX 0x%02hX 0x%02hX 0x%02hX 0x%02hX 0x%02hX \ n,( unsigned char )test2 [ 0 ],( unsigned char )test2 [ 1 ],( unsigned char )test2 [ 2 ],( unsigned char )test2 [ 3 ],( unsigned char )test2 [ 4 ],( unsigned char )test2 [ 5 ],(未签名 char )test2 [ 6 ],( unsigned char )test2 [ 7 ],( unsigned char )test2 [ 8 ],( unsigned char )test2 [ 9 ],( unsigned char )test2 [ 10 ],( unsigned char )test2 [ 11 ]);


I have made a simple XOR encryption to encrypt some packets, but decrypting does not work well... since i am a beginner in C++ please help me...

unsigned char cheimagice[] = { 0xCF, 0x10, 0x4E, 0x3A, 0xC2, 0xD8, 0x5F, 0xAD, 0xE4 };
    unsigned char test[] = { 0xC3, 0x18, 0xC7, 0xBE, 0x08, 0x1B, 0x25, 0xFF, 0x81, 0x55, 0xE0, 0xB5 };
    printf("[Criptare]: \n");
    printf("[INAINTE]: 0x%02hX 0x%02hX 0x%02hX 0x%02hX 0x%02hX 0x%02hX 0x%02hX 0x%02hX 0x%02hX 0x%02hX 0x%02hX 0x%02hX \n", (unsigned char)test[0], (unsigned char)test[1], (unsigned char)test[2], (unsigned char)test[3], (unsigned char)test[4], (unsigned char)test[5], (unsigned char)test[6], (unsigned char)test[7], (unsigned char)test[8], (unsigned char)test[9], (unsigned char)test[10], (unsigned char)test[11]);
    unsigned char *test1 = new unsigned char[sizeof(test)];
    unsigned char *test2 = new unsigned char[sizeof(test)];
    // criptare :)
    for (unsigned int i = 0; i < sizeof(test); ++i)
    {
        test1[i] ^= test[i - 1] ^ cheimagice[i % 9];
    }
    printf("[DUPA]: 0x%02hX 0x%02hX 0x%02hX 0x%02hX 0x%02hX 0x%02hX 0x%02hX 0x%02hX 0x%02hX 0x%02hX 0x%02hX 0x%02hX \n", (unsigned char)test1[0], (unsigned char)test1[1], (unsigned char)test1[2], (unsigned char)test1[3], (unsigned char)test1[4], (unsigned char)test1[5], (unsigned char)test1[6], (unsigned char)test1[7], (unsigned char)test1[8], (unsigned char)test1[9], (unsigned char)test1[10], (unsigned char)test1[11]);
    // decriptare :)
    printf("[Decriptare]: \n");
    printf("[INAINTE]: 0x%02hX 0x%02hX 0x%02hX 0x%02hX 0x%02hX 0x%02hX 0x%02hX 0x%02hX 0x%02hX 0x%02hX 0x%02hX 0x%02hX \n", (unsigned char)test1[0], (unsigned char)test1[1], (unsigned char)test1[2], (unsigned char)test1[3], (unsigned char)test1[4], (unsigned char)test1[5], (unsigned char)test1[6], (unsigned char)test1[7], (unsigned char)test1[8], (unsigned char)test1[9], (unsigned char)test1[10], (unsigned char)test1[11]);
    for (unsigned int i = 0; i < sizeof(test1); ++i)
    {
        test2[i] ^= test1[i - 1] ^ cheimagice[i % 9];
    }
    printf("[DUPA]: 0x%02hX 0x%02hX 0x%02hX 0x%02hX 0x%02hX 0x%02hX 0x%02hX 0x%02hX 0x%02hX 0x%02hX 0x%02hX 0x%02hX \n", (unsigned char)test2[0], (unsigned char)test2[1], (unsigned char)test2[2], (unsigned char)test2[3], (unsigned char)test2[4], (unsigned char)test2[5], (unsigned char)test2[6], (unsigned char)test2[7], (unsigned char)test2[8], (unsigned char)test2[9], (unsigned char)test2[10], (unsigned char)test2[11]);



The Output:

[Criptare]:
[INAINTE]: 0xC3 0x18 0xC7 0xBE 0x08 0x1B 0x25 0xFF 0x81 0x55 0xE0 0xB5
[DUPA]: 0xE3 0xD3 0x6C 0xFD 0x11 0xD0 0x29 0x88 0x21 0x4E 0x36 0xAE
[Decriptare]:
[INAINTE]: 0xE3 0xD3 0x6C 0xFD 0x11 0xD0 0x29 0x88 0x21 0x4E 0x36 0xAE
[DUPA]: 0x6C 0xF3 0x9D 0x56 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00

解决方案

Why are you trying to address values outside the lower bound of the input array?
Here

for (unsigned int i = 0; i < sizeof(test); ++i)
{
    test1[i] ^= test[i - 1] ^ cheimagice[i % 9];
}


and here

for (unsigned int i = 0; i < sizeof(test1); ++i)
{
    test2[i] ^= test1[i - 1] ^ cheimagice[i % 9];
}


What should have been the scope? This should have also triggered a memory violation exception. Moreover Xoring contents of destination doesn't help to get the result.
[EDIT] I fixed the code:

unsigned char cheimagice[] = { 0xCF, 0x10, 0x4E, 0x3A, 0xC2, 0xD8, 0x5F, 0xAD, 0xE4 };
		unsigned char test[] = { 0xC3, 0x18, 0xC7, 0xBE, 0x08, 0x1B, 0x25, 0xFF, 0x81, 0x55, 0xE0, 0xB5 };
		printf("[Criptare]: \n");
		printf("[INAINTE]: 0x%02hX 0x%02hX 0x%02hX 0x%02hX 0x%02hX 0x%02hX 0x%02hX 0x%02hX 0x%02hX 0x%02hX 0x%02hX 0x%02hX \n", (unsigned char)test[0], (unsigned char)test[1], (unsigned char)test[2], (unsigned char)test[3], (unsigned char)test[4], (unsigned char)test[5], (unsigned char)test[6], (unsigned char)test[7], (unsigned char)test[8], (unsigned char)test[9], (unsigned char)test[10], (unsigned char)test[11]);
		unsigned char *test1 = new unsigned char[sizeof(test)];
		unsigned char *test2 = new unsigned char[sizeof(test)];
	    // criptare :)
		for (unsigned int i = 0; i < sizeof(test); ++i)
		{
			test1[i] = test[i] ^ cheimagice[i % 9];
		}
		printf("[DUPA]: 0x%02hX 0x%02hX 0x%02hX 0x%02hX 0x%02hX 0x%02hX 0x%02hX 0x%02hX 0x%02hX 0x%02hX 0x%02hX 0x%02hX \n", (unsigned char)test1[0], (unsigned char)test1[1], (unsigned char)test1[2], (unsigned char)test1[3], (unsigned char)test1[4], (unsigned char)test1[5], (unsigned char)test1[6], (unsigned char)test1[7], (unsigned char)test1[8], (unsigned char)test1[9], (unsigned char)test1[10], (unsigned char)test1[11]);
	    // decriptare :)
		printf("[Decriptare]: \n");
		printf("[INAINTE]: 0x%02hX 0x%02hX 0x%02hX 0x%02hX 0x%02hX 0x%02hX 0x%02hX 0x%02hX 0x%02hX 0x%02hX 0x%02hX 0x%02hX \n", (unsigned char)test1[0], (unsigned char)test1[1], (unsigned char)test1[2], (unsigned char)test1[3], (unsigned char)test1[4], (unsigned char)test1[5], (unsigned char)test1[6], (unsigned char)test1[7], (unsigned char)test1[8], (unsigned char)test1[9], (unsigned char)test1[10], (unsigned char)test1[11]);
		for (unsigned int i = 0; i < sizeof(test1); ++i)
		{
			test2[i] = test1[i] ^ cheimagice[i % 9];
		}
		printf("[DUPA]: 0x%02hX 0x%02hX 0x%02hX 0x%02hX 0x%02hX 0x%02hX 0x%02hX 0x%02hX 0x%02hX 0x%02hX 0x%02hX 0x%02hX \n", (unsigned char)test2[0], (unsigned char)test2[1], (unsigned char)test2[2], (unsigned char)test2[3], (unsigned char)test2[4], (unsigned char)test2[5], (unsigned char)test2[6], (unsigned char)test2[7], (unsigned char)test2[8], (unsigned char)test2[9], (unsigned char)test2[10], (unsigned char)test2[11]);


这篇关于XOR加密数据包无法正确解密的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆