0

我正在学习加密课程,其中一项作业要求我们对一堆十六进制密文进行异或运算并尝试找到加密的消息。

我知道您可以在 int 或 long 前面执行 '0x' 以在变量中保存十六进制值,但是如果我的消息这么长怎么办:

271946f9bbb2aeadec111841a81abc300ecaa01bd8069d5cc91005e9fe4aad6e04d513e96d99de2569bc5e50eeeca709b50a8a987f4264edb6896fb537d0a716132ddc938fb0f836480e06ed0fcd6e9759f40462f9cf57f4564186a2c1778f1543efa270bda5e933421cbe88a4a52222190f471e9bd15f652b653b7071aec59a2705081ffe72651d08f822c9ed6d76e48b63ab15d0208573a7eef027

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

还是有我不知道的更简单的技术?

谢谢

4

4 回答 4

2

对于这样的事情,您通常会使用字符串或 avector<char>来保存数据。您不能将整个字符串/向量用作 的操作数^,但可以一次应用一个字节。

如果你想简化其余的代码,你可以创建一个重载的类operator^来做一个字节异或,所以你的代码看起来像result = key ^ message;.

于 2012-08-10T00:03:02.873 回答
1

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

于 2012-08-10T00:06:27.307 回答
0

把它放在一个单独的文本文件中

将文件读入缓冲区

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

于 2012-08-10T00:02:29.910 回答
0

Jerry & Scott 有合理的建议。另一种选择是使用现有的库:例如,位于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 ),并明确旨在为密码学提供出色的支持。

于 2012-08-10T00:51:29.470 回答