在AS3.0中解决"两个大数相乘值不正确"的问题, 参考的C#的zip加密/解密算法. 在实际的测试开发过程中, 我知道需要采用了十六进制相乘的算法, 并对得到的十六进制的数据从低位截取八位, 将这八位十六进制值加一后赋给 _Keys[1]. 这样计算后得到的key的值完全和C#的key值一致了.
代码如下:
上述代码用到了_Keys[1] = CRC32.calcUnit32(_Keys[1])+ 1; CRC32.calcUnit32就是用来解决在"AS zip加密解密算法一"中遇到的并导致Encrypt的Flex端开发停止的问题.
代码如下:
到此AS3.0代码就基本上就实现zip加密/解密的功能. 这样Encrypt能够在Flex和Java两端传输zip加密后的数据, 并对其解密.
总结:
1、AS3的大数相乘结果不正确,采用BigInteger十六进制方式相乘,并取其后八位。
2、AS3和C#类似,byte是无符号的, Java的byte是有符号的。
3、增加12位数据,最后一位是(dostime>>8)& 0xff,用来验证密码的正确性
(转贴请注明出处)
Author:David
Mail:xiang.okay@gmail.com