Android NDK 获取二进制文件的 md5
Android NDK get md5 of the binary file
说明
我正在尝试获取二进制(.dex
)文件的md5哈希,该文件存储在/data/data/my.package.name/file.dex
中。我使用Android NDK (C++)。
问题
获取文件哈希的几种方法:
- 从我的笔记本电脑:
md5sum file.dex
->5a65273b2ee336ad2c45a9306be162f6
- 使用
adb shell
:md5sum file.dex
->5a65273b2ee336ad2c45a9306be162f6
- 从我的C++代码:
int err = 0;
zip *z = zip_open(getBaseApkAbsolutePath(), 0, &err);
const char *name = "classes.dex";
struct zip_stat st;
zip_stat_init(&st);
zip_stat(z, name, 0, &st);
char *contents = new char[st.size];
zip_file *f = zip_fopen(z, name, 0);
zip_fread(f, contents, st.size);
std::ofstream ofstream;
ofstream.open("/data/data/my.package/classes.dex", std::ofstream::binary);
ofstream.write(contents, st.size);
joyee::MD5 md5 = joyee::MD5();
md5.update(contents, sizeof(contents));
md5.finalize();
LOG(md5.toString());
LOG(joyee::md5(contents));
zip_fclose(f);
zip_close(z);
然后我得到这个 -> aaaeb407992f9fe57cc6235ece90ec35
澄清
- 我的代码适用于简单的字符串,如
Hello, World!
- MD5 实现效果很好
问题
如何使用 C++ 在 Android 中获取二进制文件的 md5 哈希?
这是问题所在:
md5.update(contents, sizeof(contents));
您采用指针的大小(4 或 8),而不是它指向的缓冲区。因此,您有效地计算了前几个字节的md5sum。改为传递st.size
以检查完整文件。
相关文章:
- 正在读取二进制文件(is_open)
- 在C++中将类(带有Vector成员)保存为二进制文件
- 如何从二进制文件中读取字符串
- 保存/加载大量短数组到二进制文件
- 从二进制文件中读取整数数组
- Android 在编译二进制文件时重建静态库
- 在 C++ 中将双精度变量写入二进制文件
- clang 的 libFuzzer 可以在同一二进制文件中测试超过 1 个 API 吗?
- C++:实际上不是从二进制文件中读取
- 如何从二进制文件中的给定符号中获取调用程序图
- 将内部带有矢量的结构保存/读取到二进制文件中
- 编译多个C++文件.调用二进制文件以运行代码
- 如何使用位字段将数据从二进制文件复制到结构中?
- uint8_t同一二进制文件的不同十进制值
- C++单个生成文件多个二进制文件
- 尝试将数字写入二进制文件时引发异常
- C++中读/写二进制文件
- 如何忽略某些二进制文件的执行?
- Android NDK 获取二进制文件的 md5
- 将二进制文件内容保存在字符串中,以便能够对其进行 md5 并在以后与其他文件进行比较