C++ 微小的加密算法实现会产生意想不到的结果
以下是的一个实现,它尝试加密包含文本消息的文件:C++ 微小的加密算法实现会产生意想不到的结果,c++,encryption,C++,Encryption,以下是的一个实现,它尝试加密包含文本消息的文件: main.cpp #include <iostream> #include <iomanip> #include <string> #include <fstream> #include "TEA.h" int main() try { // std::cout <<"sizeof(long) = " << sizeof(long) <<'\n';
main.cpp
#include <iostream>
#include <iomanip>
#include <string>
#include <fstream>
#include "TEA.h"
int main()
try
{
// std::cout <<"sizeof(long) = " << sizeof(long) <<'\n';
std::string src("in.txt");
std::string dest("out.txt");
std::string key("bs");
send_msg(src, dest, key);
}
catch(std::exception& e)
{
std::cerr << e.what();
exit(1);
}
输入文件,in.txt
:
微小的
输出文件中应为:
5b8fb57c 806fbcce
实际输入输出文件,out.txt
:
f3a810ff 3874d755
我做错了什么
该
+
操作的优先级高于^
,因此(z5)+z^sum+k[sum&3]
被解析为
(((z<<4) ^ (z>>5)) + z)^(sum + k[sum&3]).
((z5))+z^(sum+k[sum&3])。
另一个表达式也是如此
您应该添加括号,使表达式在执行时显式。操作的优先级高于
^
,因此(z5)+z^sum+k[sum&3]
被解析为
(((z<<4) ^ (z>>5)) + z)^(sum + k[sum&3]).
((z5))+z^(sum+k[sum&3])。
另一个表达式也是如此
您应该添加括号,使表达式的执行方式显式。问题确实与这些表达式有关(由@1201programalm指出),但与(错误的)隐式运算符优先级(或算术性)无关
问题确实与这些表达式有关(由@1201programalam指出),但与(错误的)隐式运算符优先级(或算术性)无关
哇,你怎么找到的?路人找到了什么?你可以通过搜索这些规则来找到规则。不,我是说,你是如何在这么多的代码中如此快速地找到bug的。@Passenger数十年的经验哇,你是如何找到的?@Passenger找到了什么?你可以通过搜索这些规则来找到规则。不,我的意思是,你怎么能在这么多代码中这么快地找到bug呢?路人几十年的经验
y += (z<<4 ^ z>>5) + z^sum + k[sum&3];
sum += delta;
z += (z<<4 ^ z>>5) + y^sum + k[sum>>11&3]; // <------ the problem is here
z += (y<<4 ^ y>>5) + y^sum + k[sum>>11&3];