关于纠正加密库在32位&64位环境下异常现象的处理总结

2021-06-07  本文已影响0人  GenialSir

加密库在不同位数下问题的定位与解决

Reader.jpeg

促进解决问题的原因

  1. 因项目是做数据安全方面,所以对应业务模块的代码使用C++来进行实现,且以生成SO(动态)库拱Java来调用。在项目之前版本中并未涉及到针对64位环境的兼容,一直在Android的armabi与armeabi-v7a下使用。因Google市场在20190801之后更新GooglePlay必须提供支持64位动态库的要求,当时因未能明确定位问题而将这一问题拖拉了下来,因为不影响国内使用。
  2. 随着国内应用市场也明确要求强制支持64位的支持,具体如图:
国内市场要求兼容64位的提醒通知.png
  1. 故解决这个问题的优先级也被排在前列,本着养成的没有解决不了的问题的理念,专心的去深耕细挖,最终一定会解决。

定位问题的方法

断点到的代码位置.png 内存地址数据查看.png
1. size:表示的是每个展示的值所占的字节数,可以使用1、2、4、8等,但要与显示的数据匹配。
2. format:表示的是显示类型x表示16进制,也可以指定f(float)、d(int)、u(unsigned int)等。
3. count:表示的是显示数值的个数。
4. 0x29a9e420:表示的是要调试的内存地址值。

加密数值在32位与64位的比较

需注意的事项

对应动态库环境的配置.png

排查与定位

使用wxMedit查看测试数据16进制值.png ulbuf的定义.png 出现异样的代码位置.png 32位执行SMS4F函数前的内存中数值.png
ulbuf在64位执行SMS4F函数前的内存中数值如图: 64位执行SMS4F函数前的内存中数值.png 32位执行SMS4F函数后的内存中数值.png

ulbuf在64位执行SMS4F函数后的内存中数值如图:

64位执行SMS4F函数后的内存中数值.png

解决与总结

uint32之前的定义.png uint32修改后的定义.png
上一篇 下一篇

猜你喜欢

热点阅读