iOS 注册密码加密 添加了时间戳 遇到的问题...
今天项目 遇到一个事故,我本想用 一个形容这个事故的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)
因为这个问题是在临近结束当前开发任务发现的么,我这边的个人想法是:
iOS 注册密码加密 添加了时间戳 遇到的问题...的更多相关文章
- Shiro自定义realm实现密码验证及登录、密码加密注册、修改密码的验证
一:先从登录开始,直接看代码 @RequestMapping(value="dologin",method = {RequestMethod.GET, RequestMethod. ...
- Django项目:CRM(客户关系管理系统)--45--37PerfectCRM实现King_admin添加用户时密码加密
#views # ————————02PerfectCRM创建ADMIN页面———————— from django.shortcuts import render # ————————04Perfe ...
- django实现密码加密的注册(数据对象插入)
在 django实现密码非加密的注册(数据对象插入)的基础上,我们对视图和注册页面进行了简单修改 视图 from django.shortcuts import render,redirect,ren ...
- 1、5 写注册的后台并写前台html&密码加密&id 随机
1 public void save(Student student) { // TODO Auto-generated method stub student.setSid(UUID.randomU ...
- iOS 中的加密方式
iOS 中的加密方式 1 加密方式主要有: Base64,MD5,RSA,DES,AES,钥匙串存储,Cookie 2 各加密方式的比较 2.1 Base64 2.1.1 基本原理:采用64个基本的 ...
- 密码加密与微服务鉴权JWT
博客学习目标 1.用户注册时候,对数据库中用户的密码进行加密存储(使用 SpringSecurity). 2.使用 JWT 鉴权认证. 一.BCrypt 密码加密 1.常见的加密方式 任何应用考虑到安 ...
- (三)学习MVC之密码加密及用户登录
1.密码加密采用SHA256 算法,此类的唯一实现是 SHA256Managed.在Common/Text.cs里添加Sha256方法: public static string Sha256(str ...
- IOS常见的加密方法,常用的MD5和Base64
iOS代码加密常用加密方式 iOS代码加密常用加密方式,常见的iOS代码加密常用加密方式算法包括MD5加密.AES加密.BASE64加密,三大算法iOS代码加密是如何进行加密的,且看下文 MD5 iO ...
- C#实现京东登录密码加密POST
1.京东登录登录密码 function getEntryptPwd(pwd) { var pubKey = $('#pubKey').val(); if (!pwd || !pubKey || !Sy ...
随机推荐
- 职业定位(移动端、ios开发、Android开发)
移动端 移动端webapp开发必备知识:http://www.chinaz.com/manage/2012/1128/283974.shtml 设计一款好的移动App,有哪些基本规则?http://w ...
- 前言(Core Data 应用开发实践指南)
Core Data 并不是数据库,它其实是一个拥有多种功能的框架.其中,有个功能是把程序与数据库之间的交互过程自动化,不用再编写SQL代码,改用Objective-C对象来实现. Core Data ...
- QStandardItemModel的简单应用
The QStandardItemModel class provides a generic model for storing custom data. QStandardItemModel提供了 ...
- Java-io流入门到精通详细总结
IO流:★★★★★,用于处理设备上数据. 流:可以理解数据的流动,就是一个数据流.IO流最终要以对象来体现,对象都存在IO包中. 流也进行分类: 1:输入流(读)和输出流(写). 2:因为处理的数据不 ...
- ThinkPHP创建应用的一般开发流程
使用ThinkPHP创建应用的一般开发流程是: 系统设计.创建数据库和数据表:(可选) 项目命名并创建项目入口文件,开启调试模式: 完成项目配置: 创建项目函数库:(可选) 开发项目需要的扩展(模式. ...
- js原生设计模式——9外观模式封装
1.事件处理程序兼容性封装 <!DOCTYPE html><html lang="en"><head> <meta charset= ...
- Servlet 异步处理
web容器会为每个请求分配一个线程,Servlet3.0新增了异步处理,解决多个线程不释放占据内存的问题.可以先释放容器分配给请求的线程与相关资源,减轻系统负担,原先释放了容器所分配线程的请求,其响应 ...
- Handler消息传递机制——Handler、Loop、MessageQueue的工作原理
为了更好地理解Handler的工作原理,先介绍一下与Handler一起工作的几个组件. Message:Handler接收和处理的消息对象. Looper:每个线程只能拥有一个Looper.它的loo ...
- java Swing 图片缓冲机制
java Swing 图片缓冲机制: 参考:http://jorneyr.iteye.com/blog/868858#comments package util; import java.awt.ge ...
- FlashPlayer11 异步解码 Bitmap
Flash Player 11引入了一个全新的功能是异步解码位图的功能,这个功能对某些类型的Flash应用会很有效,尤其是需要加载大分辨率的位图的相册或游戏会有显著效果,使用位图图像时,可以异步解码和 ...