如何在C ++中存储长十六进制值消息

时间:2012-08-09 23:57:55

标签: c++ hex

我正在学习一个加密类,其中一个任务要求我们xor一堆十六进制密文并尝试找到加密的消息。

我知道你可以在int前面做'0x'或者在变量中保持一个十六进制值,但是如果我的消息很长,那该怎么办:

271946f9bbb2aeadec111841a81abc300ecaa01bd8069d5cc91005e9fe4aad6e04d513e96d99de2569bc5e50eeeca709b50a8a987f4264edb6896fb537d0a716132ddc938fb0f836480e06ed0fcd6e9759f40462f9cf57f4564186a2c1778f1543efa270bda5e933421cbe88a4a52222190f471e9bd15f652b653b7071aec59a2705081ffe72651d08f822c9ed6d76e48b63ab15d0208573a7eef027

我会溢出。有没有办法将整个消息放入一个变量?我可以将消息拆分为子部分,但我更喜欢它是变量而不是很多(如果可能的话)。我尝试使用字符串来进行按摩,但是如何使用运算符'^'来表示xor?

或者有一种我不知道的更简单的技术吗?

由于

4 个答案:

答案 0 :(得分:2)

对于类似的内容,您通常使用字符串或vector<char>来保存数据。您不能将整个字符串/向量用作^的操作数,但您可以一次应用一个字节。

如果您想简化其余代码,可以创建一个重载operator^的类来执行字节方式的异或,因此您的代码看起来像result = key ^ message;

答案 1 :(得分:1)

您可以使用任意大小的整数数组,并将您的运算符一次应用于它(这可能比字符数组更有效)。 @JerryCoffin将它包装在一个带有重载运算符的类中的想法是一个很好的,无论你使用的实际表示如何。

答案 2 :(得分:0)

将其放在单独的文本文件中

将文件读入缓冲区

将ascii字符转换为十六进制值

答案 3 :(得分:0)

Jerry&amp;斯科特有完善的建议。另一种选择是使用现有的库:例如,http://gmplib.org处的GNU GMP任意精度数学库,它支持XOR(参见http://gmplib.org/manual/Integer-Logic-and-Bit-Fiddling.html#Integer-Logic-and-Bit-Fiddling)和“scanf”样式函数以十六进制读取(请参阅http://gmplib.org/manual/Formatted-Input-Strings.html#Formatted-Input-Strings),并明确旨在为加密提供出色的支持。