首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带有std::vector的XTEA函数

带有std::vector的XTEA函数
EN

Stack Overflow用户
提问于 2014-04-12 19:27:27
回答 2查看 159关注 0票数 1

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

XTEA算法使用两个无符号的长整型(v0和v1)来加密它们,这两个长整形需要64位数据。

代码语言:javascript
复制
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));

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

或者,有没有其他方法可以将加密函数的向量分成64位部分?

EN

回答 2

Stack Overflow用户

发布于 2014-08-17 22:28:36

认识到每个字符都是一个字节;因此,64位数字由8个字节或两个32位数字组成。

因此,一个32位数字可以存储4个字节,因此对于char向量中的每个8字节块,可以将一对4字节的数字存储在一对32位数字中。然后将这一对传递给xtea函数,如下所示:

代码语言:javascript
复制
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是char8类型。

位移位'<<‘操作符将给定字节的位存储在uint32_t中的位置进行移位(例如,上例中的第一个字节存储在数据块的前8位中)。'|‘运算符提供了所有位的连接,这样您就可以得到完整的32位数字。希望这是有意义的。

票数 2
EN

Stack Overflow用户

发布于 2019-03-04 21:58:17

我的问题是,我正在寻找最好的方法来将我的字符向量转换成一个无符号的长指针。,

从C++11之前的C++11或((unsigned long*)&vec[0]))开始的((unsigned long*)vec.data())

PS:我猜会有人来争论它迟早应该是一个reinterpret_cast<unsigned long*>()或什么东西,他们可能是对的。

另外,我使用了std::string,但下面是我如何完成enciper循环的:

代码语言:javascript
复制
        string message = readMessage();
        for (size_t i = 0; i < message.length(); i += 8)
        {
            encipher(32, (uint32_t *)&message[i], keys);
        }
        // now message is encrypted

代码语言:javascript
复制
        for (size_t i = 0; i < message.length(); i += 8)
        {
            decipher(32, (uint32_t *)&message[i], keys);
        }
        // now message is decrypted (still may have padding bytes tho)

  • 和我刚刚使用了XTEA的维基百科页面上的示例C编码器/判决器函数。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23029755

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档