0
我的Android应用程序从我的服务器下载数据作为文件。验证Android和PHP之间的文件数据完整性
我想验证在传输过程中文件内容没有被篡改过。
此时,我想使用服务器上生成的CRC32值,并通过安全连接将其传输到Android客户端。
但是,PHP中生成的值与Android客户端生成的值不同。这里是我如何计算在PHP中CRC32值:
$Crc32 = hash_file('crc32b', $output_file);
这里是我的代码生成的Android:
boolean bOk = true;
File fTarget = null;
FileInputStream fis;
CRC32 crc32;
byte[] btData;
int iCount;
int iCrc32;
String strCrc32;
btData = new byte[1024];
crc32 = new CRC32();
try
{
fTarget = new File(DOWNLOAD_TARGET_PATH);
fis = new FileInputStream(fTarget);
while((iCount = fis.read(btData)) != -1)
{
crc32.update(btData, 0, iCount);
}
fis.close();
}
catch(Exception e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
iCrc32 = Integer.reverseBytes((int)crc32.getValue());
strCrc32 = String.format("%08x", iCrc32);
bOk = strCrc32.contentEquals(data.m_strCrc32);
if(!bOk && fTarget != null)
{
// delete the file as it could be dangerous
fTarget.delete();
}
return bOk;
我倒字节顺序,在调试过程中,我看到它没有比赛。
在调试版本中一切正常,但是当我创建发布版本时,它不起作用。
这样做的正确方法是什么?
'在调试版本中一切都很好,但是当我创建发布版本时,它不起作用。'。那没有意义。 – greenapps
什么是$ output_file?你是否检查过文件大小是否与发送的大小相等? – greenapps
我们无法看到您的PHP脚本如何回响$ Crc32。我们也不能看到你如何收到并存储它。只需将一个已知的句子放在$ output_file中,然后告诉所有的值。提供完整的代码,以便我们可以测试和比较。 – greenapps