系统登录时会进行密码的签名校验,在创建新用户时会将加密密码的Hash值存储在库中,再次登录时会计算输入密码加密后的Hash值与库内存储的Hash值进行比对,若不同则直接返回密码存储完整性检查失败
但比较奇怪的是正常来说刚刚新建用户的密码肯定没被篡改,并且用户密码的Hash的存储位置不易被篡改,但偏偏会偶现新建用户登录后直接报错的显示,经过多次新建用户登录工具测试发现改问题的出现与用户无关,与登录的工具或是使用登录框的方式无关,仅与密码本身有关,问题如下:
新建用户,用户密码为Opt@1234,登录会存在新密码存储完整性检查失败问题,使用其他密码则登录正常,看来问题出在这个特殊密码Opt@1234上。
针对密码完整性校验出现错误可能存在的原因有以下三种情况:

  1. 密码完整性校验出现错误
  2. 密码在登录框中输入后再计算其Hash值时出现错误
  3. 创建密码时存储在库中的Hash值出现错误
    针对第一种情况查找校验签名部分代码如下:
char password_digest[32];
if (!pass_digest(password, sizeof(password), password_digest))
{ret = false;
}
else
{if (ACE_OS::memcmp(pad15, password_digest, sizeof(pad15)) != 0){ret = false;}else{ret = true;}
}

校验签名的代码看上无问题,否则校验其他密码的签名时也会存在问题,同时在该接口中调用了pcs_digest计算签名的接口,因此情况2也排除,所以需要针对情况3进行深入研究,确认是否是在新增用户时存储加密密码的签名时出现了问题,所以在pcs_digest增加打印。

然后使用登录框时进行打印可以看到如下内容:

可以看到pad15存储的内容不对,后面全是0与直接使用pcs_digest算出的签名不同,因此断定是存储签名不对,找到存储签名的代码如下:

char digest[32];
ACE_OS::memset(digest,0,sizeof(digest));
pass_digest(password_en,sizeof(password),digest);
string_cpy(pad15,digest,32)

发现问题很有可能出在string_cpy接口上,查看string_cpy接口:

void string_cpy(char * a, const char *b, ULong len)
{if (b == NULL || a == NULL) return;Long index = 0;while( index < len){a[index] = b[index];if (b[index] == '\0') return;index++;}
}

经过查询"\0"的ASCII码为0,真相大白,使用string_cpy字符串接口拷贝时当遇到0时不再拷贝,所以使用string_cpy拷贝签名时会出现问题,应当使用memcpy,修改memcpy后问题解决。

解决签名无法校验通过的问题相关推荐

  1. Java使用RSA加密解密签名及校验

    RSA加密解密类: import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.FileReader; i ...

  2. Android Webview SSL 自签名安全校验解决方案

    Android Webview SSL 自签名安全校验解决方案 参考文章: (1)Android Webview SSL 自签名安全校验解决方案 (2)https://www.cnblogs.com/ ...

  3. Android签名与校验过程详解

    原文:https://blog.csdn.net/gulinxieying/article/details/78677487 目 录 一.签名与校验原理概要    2 1.数字签名简介    2 2. ...

  4. Android V1签名与校验原理分析(全网最全最详细)

    [前言] Android Apk V1签名方式是一开始时使用的签名方案,不过V1签名方式也称作Jar签名,顾名思义,就是V1签名并不是Android独有的签名方式,而且在Android还没出来时候,J ...

  5. Android V2签名与校验原理分析

    [前言] V1签名作为一种历史悠久的签名方式,弊端也是比较明显的,一方面由于V1签名是对Apk内的单个文件逐一计算摘要进行签名校验的,所以要是Apk内的文件比较多,计算速度是非常慢的,同时又因为只对单 ...

  6. java rsa签名_Java使用RSA加密解密签名及校验

    由于项目要用到非对称加密解密签名校验什么的,于是参考<Java加密解密的艺术>写一个RSA进行加密解密签名及校验的Demo,代码很简单,特此分享! 一.项目截图 代码下载后,导入到ecli ...

  7. android应用标签未完善,Ionic Android进行签名校验验证-应用签名未校验风险的讲解...

    Ionic签名校验验证 1. 为什么要进行签名校验 2. 查看安卓证书信息 3. 编写检验文件 3.1 编写校验文件`SignCheck.java` 3.2 修改MainActivity.java 3 ...

  8. Android App签名(证书)校验过程源码分析

      Android App安装是需要证书支持的,我们在Eclipse或者Android Studio中开发App时,并没有注意关于证书的事,也能正确安装App.这是因为使用了默认的debug证书.在A ...

  9. 解决PHP生成校验码时“图像因其本身有错无法显示”的错误

    2019独角兽企业重金招聘Python工程师标准>>> 今天使用http://crazymud.iteye.com/blog/452293给出的代码进行PHP生成校验码功能的实现,发 ...

最新文章

  1. 《Adobe Illustrator CC 2014中文版经典教程(彩色版)》—第2课2.6节隐藏和锁定对象...
  2. POJ 3517 And Then There Was One( 约瑟夫环模板 )
  3. hexo评论_Hexo系列 | Hexo的基本使用
  4. 别等了,全面「远程办公」凉了
  5. 顺时针打印3*3矩阵
  6. @jsonignore的作用
  7. 阿里云安全肖力:云的六大安全基因助力企业构建智能化安全体系
  8. PyTorch 1.0 中文文档:Windows FAQ
  9. iPhone XS Max第三方售价低于7千元 引用户疯抢
  10. 95-910-140-源码-FlinkSQL-FlinkSQL简介
  11. cup first world_LOONCUP – The world's first SMART menstrual cup.
  12. 为实现电动车长途旅行,特斯拉超级充电站将大幅升级
  13. android+p预览版小米,吃上安卓P!小米8更新首个Android P内测版
  14. C++ - Sodoku Killer(DFS) - 实现一个数独解算器
  15. 火爆全网,搜狐CEO张朝阳手推E=mc²,CEO当太久都忘了他是MIT物理博士
  16. 【虚拟机装黑苹果(第一弹)】DiskMaker X制作macOS Mojave 10.14.x的U盘启动盘
  17. 深入理解游戏中寻路算法
  18. proposal中文翻译_proposal是什么意思_ proposal的翻译_音标_读音_用法_例句_爱词霸在线词典...
  19. linux修改文件:E212 can't open file for writing
  20. 如何用电脑自带的软件录屏

热门文章

  1. 通信里 星座图 到底是什么
  2. Robitcs,CV,ASR,TTS,NLP,KG,CG是什么
  3. 深度学习——致命问题之Gradient Vanish
  4. 2019郑大计算机考研分,2019年郑大分数线未出?郑州大学近三年考研分数线汇总...
  5. 【git】git本地如何合并分支
  6. xCode 编写C++程序
  7. 批量训练pytorch练习
  8. RGB与HSV等的转换
  9. 132、网管型和非网管型交换机有什么区别
  10. linux 查看 磁盘iops,linux – 磁盘IOPS和sar tps之间的关系