Android NDK获取二进制文件的md5
Android NDK get md5 of the binary file
描述
我正在尝试获取存储在 /data/data/my.package.name/file.dex
中的二进制 (.dex
) 文件的 md5 哈希值。我使用 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
以检查完整文件。
描述
我正在尝试获取存储在 /data/data/my.package.name/file.dex
中的二进制 (.dex
) 文件的 md5 哈希值。我使用 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
以检查完整文件。