解决签名无法校验通过的问题
系统登录时会进行密码的签名校验,在创建新用户时会将加密密码的Hash值存储在库中,再次登录时会计算输入密码加密后的Hash值与库内存储的Hash值进行比对,若不同则直接返回密码存储完整性检查失败
但比较奇怪的是正常来说刚刚新建用户的密码肯定没被篡改,并且用户密码的Hash的存储位置不易被篡改,但偏偏会偶现新建用户登录后直接报错的显示,经过多次新建用户登录工具测试发现改问题的出现与用户无关,与登录的工具或是使用登录框的方式无关,仅与密码本身有关,问题如下:
新建用户,用户密码为Opt@1234,登录会存在新密码存储完整性检查失败问题,使用其他密码则登录正常,看来问题出在这个特殊密码Opt@1234上。
针对密码完整性校验出现错误可能存在的原因有以下三种情况:
- 密码完整性校验出现错误
- 密码在登录框中输入后再计算其Hash值时出现错误
- 创建密码时存储在库中的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后问题解决。
解决签名无法校验通过的问题相关推荐
- Java使用RSA加密解密签名及校验
RSA加密解密类: import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.FileReader; i ...
- Android Webview SSL 自签名安全校验解决方案
Android Webview SSL 自签名安全校验解决方案 参考文章: (1)Android Webview SSL 自签名安全校验解决方案 (2)https://www.cnblogs.com/ ...
- Android签名与校验过程详解
原文:https://blog.csdn.net/gulinxieying/article/details/78677487 目 录 一.签名与校验原理概要 2 1.数字签名简介 2 2. ...
- Android V1签名与校验原理分析(全网最全最详细)
[前言] Android Apk V1签名方式是一开始时使用的签名方案,不过V1签名方式也称作Jar签名,顾名思义,就是V1签名并不是Android独有的签名方式,而且在Android还没出来时候,J ...
- Android V2签名与校验原理分析
[前言] V1签名作为一种历史悠久的签名方式,弊端也是比较明显的,一方面由于V1签名是对Apk内的单个文件逐一计算摘要进行签名校验的,所以要是Apk内的文件比较多,计算速度是非常慢的,同时又因为只对单 ...
- java rsa签名_Java使用RSA加密解密签名及校验
由于项目要用到非对称加密解密签名校验什么的,于是参考<Java加密解密的艺术>写一个RSA进行加密解密签名及校验的Demo,代码很简单,特此分享! 一.项目截图 代码下载后,导入到ecli ...
- android应用标签未完善,Ionic Android进行签名校验验证-应用签名未校验风险的讲解...
Ionic签名校验验证 1. 为什么要进行签名校验 2. 查看安卓证书信息 3. 编写检验文件 3.1 编写校验文件`SignCheck.java` 3.2 修改MainActivity.java 3 ...
- Android App签名(证书)校验过程源码分析
Android App安装是需要证书支持的,我们在Eclipse或者Android Studio中开发App时,并没有注意关于证书的事,也能正确安装App.这是因为使用了默认的debug证书.在A ...
- 解决PHP生成校验码时“图像因其本身有错无法显示”的错误
2019独角兽企业重金招聘Python工程师标准>>> 今天使用http://crazymud.iteye.com/blog/452293给出的代码进行PHP生成校验码功能的实现,发 ...
最新文章
- 《Adobe Illustrator CC 2014中文版经典教程(彩色版)》—第2课2.6节隐藏和锁定对象...
- POJ 3517 And Then There Was One( 约瑟夫环模板 )
- hexo评论_Hexo系列 | Hexo的基本使用
- 别等了,全面「远程办公」凉了
- 顺时针打印3*3矩阵
- @jsonignore的作用
- 阿里云安全肖力:云的六大安全基因助力企业构建智能化安全体系
- PyTorch 1.0 中文文档:Windows FAQ
- iPhone XS Max第三方售价低于7千元 引用户疯抢
- 95-910-140-源码-FlinkSQL-FlinkSQL简介
- cup first world_LOONCUP – The world's first SMART menstrual cup.
- 为实现电动车长途旅行,特斯拉超级充电站将大幅升级
- android+p预览版小米,吃上安卓P!小米8更新首个Android P内测版
- C++ - Sodoku Killer(DFS) - 实现一个数独解算器
- 火爆全网,搜狐CEO张朝阳手推E=mc²,CEO当太久都忘了他是MIT物理博士
- 【虚拟机装黑苹果(第一弹)】DiskMaker X制作macOS Mojave 10.14.x的U盘启动盘
- 深入理解游戏中寻路算法
- proposal中文翻译_proposal是什么意思_ proposal的翻译_音标_读音_用法_例句_爱词霸在线词典...
- linux修改文件:E212 can't open file for writing
- 如何用电脑自带的软件录屏