今天项目 遇到一个事故,我本想用 一个形容这个事故的adj  算了 既然 叫事故 已经能表达我们处于的一种状态,

是这样的: 有小部分用户反应 app无法注册 总提示密码错误的情况 实际 该步骤 已经通过了本地校验密码的步骤.此时的密码错误反馈 是服务端返回的?

于是我们判断 密码解码 出了问题.

对于密码加密规则 真的是每个公司都有一套 很灵活. 我们由于是翻新版本 也出了新的一套密码加密规则,

如下:

登录加密方式

md5(md5(password))

这个登录加密比较好理解,针对原始密码 二次md5,  此时服务端在注册时候已经知道你的密码 也进行二次md5 再和你上传的password加密结果进行比较 即可

注册加密方式:

几个参数:

appKey :服务端提供的key,放在app本地。用于参与下面的加密

time  : 获得当前时间戳并保留变量,用于上传给服务端 (秒级别)

date:  将时间戳转为 “分:秒:时 日-月-年” 格式

password1: 截取用户输入密码的前m位,再进行字符串反转操作

password2: 用户输入密码的剩余字符,再进行字符串反转操作

code : md5(AppKey+date);

最终公式如下

passwrod=反转字符串(base64_encode (code+password1+code+password2+code))

NOTE: time 时间戳需要一起上传给服务端

其实 这里的关键问题 就是对 time 和 date的理解,

服务端希望加密结果是动态的,所以引入时间戳加密

然后通过上传的time  服务端再把结果反解密 得到原始密码

其实 说到这里 我们大家就都知道 为什么 用户反馈说无法注册了———服务端没有解密出原始密码!!!!

关键就是这个时间戳 出现了严重的问题.

设计该套加密过程,我们 前端和后端没有约定 这个时间戳到底以什么时区为标准!!!  客户端默认 是用户当地时区处理的

服务端解密 时候 把时间戳 按北京时区处理了,

恰巧 我们的确存在部分海外用户, 注册或者 重新找回密码 直接就失败了.

其实解决很简单

方法我们选择两种

(1)前端后端统一时区

(2)前端不动 后端要对 第一次解密过程判断 如果没有得到密码结果 要遍历其他时区继续解密 至解密成功

当前,为了App Store 用户即可用 我们采用了方法(2)

在接下来的迭代,遵循设计规则(1)

因为这个问题是在临近结束当前开发任务发现的么,我这边的个人想法是:

a 这个问题客户端马上可以配合修改,执行(1). 这样服务端就少维护一个错误版本 
b 其次考虑到,毕竟后端遍历处理 并发量是一个问题啊, 如此处理 很是鸡肋.
c 客户端处理并且仅仅处理注册这块的和加密相关的一个时间戳时区问题,对于其他功能代码 无逻辑业务功能关联,测试也就测这块, 属于可把控范围内

 
但是其他人的意见是: 
 
a 小范围 影响,仅仅是小部分海外用户  
b  临上线 改东西 影响大  不可预测
c 服务端 在用正常方法解不开时候才for循环
 
最终 我从众 (目前公司没有CTO 来做决策 所以 几个人讨论...)
 
这也是我成长路上遇到一个比较考验人的问题吧, 真的很考验人,一个错误不成熟的交互设计, 修改后 到底如何执行, 真的很考验领导者的应变能力和领导力.
 
解决方案很灵活, 具体事件具体探讨分析,不断成长锻炼,如果有一天 我作为管理者,我必须要有足够理由告诉,说服大家,这么做,是权益最大的一个方案. 
 
还是在成长中啊

iOS 注册密码加密 添加了时间戳 遇到的问题...的更多相关文章

  1. Shiro自定义realm实现密码验证及登录、密码加密注册、修改密码的验证

    一:先从登录开始,直接看代码 @RequestMapping(value="dologin",method = {RequestMethod.GET, RequestMethod. ...

  2. Django项目:CRM(客户关系管理系统)--45--37PerfectCRM实现King_admin添加用户时密码加密

    #views # ————————02PerfectCRM创建ADMIN页面———————— from django.shortcuts import render # ————————04Perfe ...

  3. django实现密码加密的注册(数据对象插入)

    在 django实现密码非加密的注册(数据对象插入)的基础上,我们对视图和注册页面进行了简单修改 视图 from django.shortcuts import render,redirect,ren ...

  4. 1、5 写注册的后台并写前台html&密码加密&id 随机

    1 public void save(Student student) { // TODO Auto-generated method stub student.setSid(UUID.randomU ...

  5. iOS 中的加密方式

    iOS 中的加密方式 1 加密方式主要有: Base64,MD5,RSA,DES,AES,钥匙串存储,Cookie 2 各加密方式的比较 2.1 Base64 2.1.1 基本原理:采用64个基本的 ...

  6. 密码加密与微服务鉴权JWT

    博客学习目标 1.用户注册时候,对数据库中用户的密码进行加密存储(使用 SpringSecurity). 2.使用 JWT 鉴权认证. 一.BCrypt 密码加密 1.常见的加密方式 任何应用考虑到安 ...

  7. (三)学习MVC之密码加密及用户登录

    1.密码加密采用SHA256 算法,此类的唯一实现是 SHA256Managed.在Common/Text.cs里添加Sha256方法: public static string Sha256(str ...

  8. IOS常见的加密方法,常用的MD5和Base64

    iOS代码加密常用加密方式 iOS代码加密常用加密方式,常见的iOS代码加密常用加密方式算法包括MD5加密.AES加密.BASE64加密,三大算法iOS代码加密是如何进行加密的,且看下文 MD5 iO ...

  9. C#实现京东登录密码加密POST

    1.京东登录登录密码 function getEntryptPwd(pwd) { var pubKey = $('#pubKey').val(); if (!pwd || !pubKey || !Sy ...

随机推荐

  1. bzoj3991 [Sdoi2015]寻宝游戏 set动态维护虚树+树链求并

    题目大意:支持多次操作,增加或删除一个关键点 动态维护虚树边权和*2 分析:可以用树链求并的方法,最后减去虚树的根到1距离 注意到树链求并是所有点到根距离-所有dfn序相邻两点的LCA到根距离 找df ...

  2. Windows与Linux文件系统互访的几种方法

    首先,我们知道基于文件的几种服务:ftp,sftp,这两种服务都是文件传输服务,偏重于网络传输,并不是实时互访.通常,我们需要在远程和本地 同时操作同一个目录,如:在Windows下使用各种强大的ID ...

  3. PHP做负载均衡回话保持问题参考

    最近一个项目的服务器老是出现Session数据丢失问题,导致用户莫名其妙的退出,原因是太相信我们的运维人员所谓的负载均衡会话保持的概念.会话保持 的原理就是负载均衡通过Cookie来分发那个客户连接被 ...

  4. Intent的属性及Intent-filter配置——Data、Type属性与intent-filter配置

    Data属性通常用于向Action属性提供操作的数据,Data属性接受一个Uri对象,一个Uri对象通常通过如下形式的字符串来表示: content://com.android.contacts/co ...

  5. redhat6 + 11G DG部署

    在主库中netca配置 [oracle@HE3dbs]$ cat /u01/app/oracle/product/11gr2/db_1/network/admin/listener.ora #list ...

  6. pureMVC简单示例及其原理讲解四(Controller层)

    本节将讲述pureMVC示例中的Controller层. Controller层有以下文件组成: AddUserCommand.as DeleteUserCommand.as ModelPrepCom ...

  7. .NET 通用高扩展性的细粒度权限管理架构(webApi/Mvc)

    一. 权限场景分析: 1. 系统具有角色概念, 部门概念, 且都具有相应不同的权限 2. 用户具有多个角色, 多个部门等关系, 并且能给单个用户指派独有的权限 3. 具有细粒度权限控制到资源的RBAC ...

  8. Jcompress: 一款基于huffman编码和最小堆的压缩、解压缩小程序

    前言 最近基于huffman编码和最小堆排序算法实现了一个压缩.解压缩的小程序.其源代码已经上传到github上面: Jcompress下载地址 .在本人的github上面有一个叫Utility的re ...

  9. 【求Java工程师/专家】大型互联网公司急招

    互联网行业排名Top公司,目前项目扩张阶段,需求数量较多的JAVA中高端后台开发人员,需要有分布式系统开发经验,年后有找工作的同学可以联系我了. 工作地点:杭州 岗位要求: 1.精通Java SE和J ...

  10. 深圳尚学堂:Android APP的测试流程

    每一个新开发的软件都避免不了测试,我在这里总结了一些Android系统的移动端APP测试的一些测试流程,希望可以给大家一些帮助. 1. UI 测试App主要核ui与实际设计的效果图是否一致:交互方面的 ...