c++ - 带 std::vector 的 XTEA 函数

标签 c++ vector xtea

我正在尝试使用 XTEA 加密 std::vector。因为使用 std::vector 带来了处理大量数据的各种好处,所以我想使用它。

XTEA-Alogrithm 使用两个采用 64 位数据的无符号长整型(v0 和 v1)来加密它们。

xtea_enc(unsigned char buf[], int length, unsigned char key[], unsigned char** outbuf)
/* Source http://pastebin.com/uEvZqmUj */

unsigned long v0 = *((unsigned long*)(buf+n));  
unsigned long v1 = *((unsigned long*)(buf+n+4));

我的问题是,我正在寻找将我的 char vector 转换为无符号长指针的最佳方法。

或者是否有另一种方法将 vector 拆分为 64 位部分以实现加密功能?

最佳答案

洞察来自于意识到每个字符都是一个字节;因此,一个 64 位数字由 8 个字节或两个 32 位数字组成。

因此,一个 32 位数字可以存储 4 个字节,因此对于 char vector 中的每个 8 字节 block ,您可以将一对 4 字节数字存储在一对 32 位数字中。然后,您会将这一对传递给您的 xtea 函数,例如:

uint32_t datablock[2];
datablock[0] = (buf[0] << 24) | (buf[1] << 16)  | (buf[2] << 8) | (buf[3]);
datablock[1] = (buf[4] << 24) | (buf[5] << 16)  | (buf[6] << 8) | (buf[7]);

在此示例中,buf 是 char[8] 类型(或更恰本地说是 uint8_t[8])。

位移位“<<”运算符移动给定字节的位应存储在 uint32_t 中的位置(因此,例如,上例中的第一个字节存储在数据 block 的前 8 位中 [0 ]). '|'运算符提供所有位的连接,以便您最终得到完整的 32 位数字。希望这是有道理的。

关于c++ - 带 std::vector 的 XTEA 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23029755/

相关文章:

c++ - inline 是否确定内部链接?

c++ - C++ 和 operator[] 中的自定义 Vector 和 Matrix 类

C++ vector 下标超出范围

c++ - 如何解密xxtea?

c++ - 来自备选方案的部分匹配的综合属性

c++ - C++中的多线程服务器,如何终止线程并很好地清理

java - 在 Java 中使用 XTEA 的实现需要帮助

c++ - 使用鼠标回调修改类中的 Mat 属性

c++ - C++-负数和正数之间的比较返回false