Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/flash/4.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
Actionscript 3 mcrypt_解密函数卡在永恒循环中_Actionscript 3_Flash_Actionscript_Mcrypt - Fatal编程技术网

Actionscript 3 mcrypt_解密函数卡在永恒循环中

Actionscript 3 mcrypt_解密函数卡在永恒循环中,actionscript-3,flash,actionscript,mcrypt,Actionscript 3,Flash,Actionscript,Mcrypt,我正在处理一个解密函数,结果遇到了麻烦。我对Actionscript不是很有经验,但当我运行这个函数时,它会无限循环 private function mcrypt_decrypt(param1:Array, param2:Number,param3:Number): Array { var _loc4_:* = -9.57401312E8; while(_loc4_) { var param3:Number = param3 - ((param2 << 4 ^ par

我正在处理一个解密函数,结果遇到了麻烦。我对Actionscript不是很有经验,但当我运行这个函数时,它会无限循环

private function mcrypt_decrypt(param1:Array, param2:Number,param3:Number): Array {
 var _loc4_:* = -9.57401312E8;
 while(_loc4_)
 {
    var param3:Number = param3 - ((param2 << 4 ^ param2 >>> 5) + param2 ^ _loc4_ + param1[_loc4_ >>> 11 & 3]);
    _loc4_ = _loc4_ - -1640531527;
    var param2:Number = param2 - ((param3 << 4 ^ param3 >>> 5) + param3 ^ _loc4_ + param1[_loc4_ & 3]);
 }
 return [param2,param3];
}
私有函数mcrypt_decrypt(param1:Array,param2:Number,param3:Number):数组{
变量(4):*=-9.57401312E8;
而
{
变量param3:Number=param3-((param2>>5)+param2^\u loc4\u+param1[\u loc4\u>>>11&3]);
_loc4=loc4--1640531527;
变量param2:Number=param2-((param3>>5)+param3^_loc4_+param1[_loc4_&3]);
}
返回[param2,param3];
}

从测试中,我看到loc4从-9.57401312E8开始,然后随着迭代的继续,每次都会删除-1640531527,但在什么情况下,它会满足while条件?有什么想法吗?

由于以下原因,您的函数陷入了一个永恒的循环:

_loc4=loc4--1640531527


双减号与加号相同。由于该值从不为零,因此循环中的计算结果总是返回true。

您确定每次迭代后的值吗?这些天来,我对使用Actionscript有些生疏,因为它已经使用了很多年了,但是这行代码loc4=loc4--1640531527;在我看来,它是加1640531527而不是减。。。每当我看到一个双减号,我就会看到一个加号。从我所能看到的,一次迭代后的输出是683130215.0,然后一次迭代后的输出是2323661742.0,第三次迭代后的输出是3964193269.0。因此,您在添加时是对的,但这只会使while条件何时满足变得更加复杂……while只会在loc4真正等于0时才会退出,这在您的情况下是永远不会出现的。我假设这是从php服务接收数据,因为mcrypt_decrypt函数名与mcrypt模块匹配-1640531527是十六进制0x9e3779b9,用于boost、tea等的许多散列函数中。。散列合并例程。您可以使用as3Crypto函数来替换/修复此例程。我明白了,但令人困惑的是,这是我反编译的*.swf中的一种工作方法。也许这是反编译器的问题?哦,我明白了。是的,可能就是这样。其中,变量loc4:*=-9.57401312E8;反编译器可能误解了数字。由于这是一个加密函数,如果这里出现了某种混淆,我一点也不会感到惊讶。你为什么要反编译它呢?你不能打开这个项目,从原始源代码开始使用它吗?冷静点,我只是对它的功能感兴趣。我不是在偷别人的密码。我在这里发布的原因是因为它下面的算法是TEA(微型加密算法),但总和和增量似乎是互斥的,这就是我好奇的原因。方法本身不是任何不公开的东西。从哪里开始?你是如何得出这些结论的,我在问一个关于公共加密方法的简单actionscript问题