现在的问题是,java组用java的zip加密成字节流,然后用base64加密,然后发给我们PHP。
现在用PHP可以base64解密,但是无法处理zip解压缩,因为涉及到字节流。
同时,java组不能改变算法,所以只能从PHP这边考虑,请各位大大们出个主意
现在用PHP可以base64解密,但是无法处理zip解压缩,因为涉及到字节流。
同时,java组不能改变算法,所以只能从PHP这边考虑,请各位大大们出个主意
这是发过来的串。
* 使用zip进行压缩
*
* @param str 压缩前的文本
* @return 返回压缩后的文本
*/
public static final String encrypt(String str) {
if (str == null)
return null;
byte[] compressed;
ByteArrayOutputStream out = null;
ZipOutputStream zout = null;
String compressedStr = null;
try {
out = new ByteArrayOutputStream();
zout = new ZipOutputStream(out);
zout.putNextEntry(new ZipEntry("0"));
zout.write(str.getBytes());
zout.closeEntry();
compressed = out.toByteArray();
compressedStr = new sun.misc.BASE64Encoder()
.encodeBuffer(compressed);
} catch (IOException e) {
compressed = null;
} finally {
if (zout != null) {
try {
zout.close();
} catch (IOException e) {
}
}
if (out != null) {
try {
out.close();
} catch (IOException e) {
}
}
}
return compressedStr;
} 斑竹,这是java的加密算法。。
先看看你现在的代码。
解密后是怎么样的?问问题要讲清楚你的业务需求跟你现在能做到的东西。
将 base64 解码后的内容保存到文件,用 360rar 可以打开(其他压缩软件不行)
php 的 ZipArchive 类也打不开看主体数据 4b4c4a0600 是对的,但前后的信息位都不对
头部除了一个字节外与 zip 文件流没有区别
Java的解压缩代码我已经发了,斑竹参考一下,同时,java同事说了,那的确是一个字节流。。
你的压缩包为504b0304140008080800d5aef94400000000000000000000000001000000304b4c4a0600504b0708c24124350500000003000000
头是这个
504b0304140008080800
与正常的
504b0304140000080800
就这点差异
该处解释 gen purpose bit flag
标志了算法的区别
所以保存成文件后 360rar 能打开,其他压缩软件打不开
究其原因:360rar 是自动升级的,其他压缩软件好几年够没升级了
echo "$i ", bin2hex(gzcompress('abc',$i)),PHP_EOL;
0 7801010300fcff616263024d0127
1 78014b4c4a0600024d0127
2 785e4b4c4a0600024d0127
3 785e4b4c4a0600024d0127
4 785e4b4c4a0600024d0127
5 785e4b4c4a0600024d0127
6 789c4b4c4a0600024d0127
7 78da4b4c4a0600024d0127
8 78da4b4c4a0600024d0127
9 78da4b4c4a0600024d0127现有的工具始终压缩不成你包中的数据