Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 微小的加密算法实现会产生意想不到的结果_C++_Encryption - Fatal编程技术网

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];