移动APP怎样保存用户password
<span style="font-size:14px;">为了更好的用户体验,移动APPclient一般都会将用户信息进行保存以便兴许能够自己主动登录.</span>
保存了用户信息便涉及到了安全问题.
解决办法大概有一下几种:
1.首先,假设client和服务端都是你来设计开发,那么有两种比較可靠的方案
A.client将passwordHash加密,登录成功后将hash值保存到Sqlite.服务端得到username和hash值,採用相同的算法对password进行Hash运算,然后和用户传来的hash值进行比較,一致则登录成功.更加可靠的是对password加盐加密.比如能够採用PBKDF2加盐加密.
<span style="font-size:14px;">public static String createHash(String password)throws NoSuchAlgorithmException, InvalidKeySpecException {return createHash(password.toCharArray());}/*** Returns a salted PBKDF2 hash of the password.* * @param password* the password to hash* @return a salted PBKDF2 hash of the password*/public static String createHash(char[] password)throws NoSuchAlgorithmException, InvalidKeySpecException {// Generate a random saltSecureRandom random = new SecureRandom();byte[] salt = new byte[SALT_BYTE_SIZE];random.nextBytes(salt);// Hash the passwordbyte[] hash = pbkdf2(password, salt, PBKDF2_ITERATIONS, HASH_BYTE_SIZE);return PBKDF2_ITERATIONS + ":" + toHex(salt) + ":" + toHex(hash);}</span>
加密后的字符串为1000:1507039de0a3c2c88ddf896233278e37d05fd8a0fadc570d:99222374678d4afe5d7d9bf9be4786e17f045ac217c6a2ca,
1000为迭代的次数,后面各自是salt和hash值.
服务端得到这个字符串后,从中解析出迭代次数,salt,hash1值,然后採用相同的算法对数据库里面的password进行计算
public static boolean validatePassword(String password, String correctHash)throws NoSuchAlgorithmException, InvalidKeySpecException {return validatePassword(password.toCharArray(), correctHash);}/*** Validates a password using a hash.* * @param password* the password to check* @param correctHash* the hash of the valid password* @return true if the password is correct, false if not*/public static boolean validatePassword(char[] password, String correctHash)throws NoSuchAlgorithmException, InvalidKeySpecException {// Decode the hash into its parametersString[] params = correctHash.split(":");int iterations = Integer.parseInt(params[ITERATION_INDEX]);byte[] salt = fromHex(params[SALT_INDEX]);byte[] hash = fromHex(params[PBKDF2_INDEX]);// Compute the hash of the provided password, using the same salt,// iteration count, and hash lengthbyte[] testHash = pbkdf2(password, salt, iterations, hash.length);// Compare the hashes in constant time. The password is correct if// both hashes match.return slowEquals(hash, testHash);}
假设hash2和hash1一致,则登录成功.同一时候client将加密后的字符串保存到本地数据库,下次登录时直接从数据库读取.
B.使用非对称加密算法对password进行加密.
- client使用公钥加密password,得到加密串,然后将其发送到服务端.
- 服务端使用私钥解密password。进行验证,
- 登录成功后,client将加密串保存到本地,便于下次自己主动登录;
android中使用jni对字符串加解密实现分析
加盐password哈希:怎样正确使用
转载于:https://www.cnblogs.com/jhcelue/p/7190220.html
移动APP怎样保存用户password相关推荐
- 移动App该怎样保存用户password
版权声明:本文为横云断岭原创文章,未经博主同意不得转载.微信公众号:横云断岭的专栏 https://blog.csdn.net/hengyunabc/article/details/34623957 ...
- 魔方APP项目-07-客户端提交登录信息、在APICloud中集成防水墙验证码,前端获取显示并校验验证码、服务端校验验证码、保存用户登录状态,APICloud提供的数据存储、客户端保存用户登陆数据
用户登录 一.客户端提交登录信息 html/login.html,代码: <!DOCTYPE html> <html> <head><title>登录& ...
- 移动App该如何保存用户密码
这个实际上和桌面程序是一样的. 先看下一些软件是如何保存用户密码的: 我们先来看下QQ是怎么保存密码的: 参考:http://bbs.pediy.com/archive/index.php?t-159 ...
- 基于服务器端保存用户的查询参数
基于服务器端保存用户的查询参数 最近公司项目有一个新的需求, 希望用户在PC查询的参数能够同步更新到APP端, 避免让用户在PC和APP端重复输入查询条件, 基于项目是前后端分离, APP和PC的请求 ...
- html 存储登录状态,Vue中保存用户登录状态实例代码
首先我们假设,这里的登录组件(register.vue)是App.vue组件的子组件,是通过路由进入登录组件的. 登录组件中用户点击登录后,后台会传过来一个用户名,我的App.vue组件中需要拿到这个 ...
- UWP 保存用户设置
一:需求 需要保存用户设置,用户下一次再打开app时,加载默认的设置.比如用户设置的主题颜色,用户自定义的文件保存路径等. 一般应用的的数据存储分为两种,一种是云存储(将数据保存在云端,下次打开的时候 ...
- Android 自定义ToggleButton+用SharedPreferences保存用户配置
布局文件: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:i ...
- 登录页面设置cookie,用户登录后,创建cookie保存用户信息
代码要求: 用户登录后,创建cookie保存用户信息 设置cookie的有效期为5分钟 在登录页循环遍历cookie数组,判断是否存在指定名称的cookie,若存在则直接跳转至欢迎页面 代码实现过程: ...
- Ubuntu:PHP语言实现网页登录并保存用户cookie,使用mysql数据库
Ubuntu:PHP语言实现网页登录并保存用户cookie,使用mysql数据库 网页主要实现功能 建立网页mysql数据库信息 网页登录及反馈页面代码 登录页面 登录反馈界面 输入URL在地址栏登录 ...
最新文章
- 解决JS在url中传递参数时参数包含中文乱码的问题
- 【性能优化实战】java嵌入式开发pos
- java中Freemarker list指令详解
- 以下哪个选项不是单例模式的优点_深度解密Python单例模式
- 现代数学和理论物理已经发展到多么令人震惊的水平了?
- Linux命令find查询suid和sgid
- swift基础之_swift调用OC/OC调用swift
- 剑指offer-数值的整数次方
- c#如何取得事件注册的方法
- 基于tushare和python的证券市场价格分析
- 我对onselect和onchange事件的误解
- android 圆角 水波纹_Android实现水波纹点击效果
- phpword模板替换并插入表格
- 携程旅行网的盈利模式
- Latex 中如何使插图的位置不跑到开头而紧跟插入的文字后
- 一物一码(7): 【一物一码营销场景之促销】
- 计算球的体积-java
- elementui的el-select、el-date-picker的宽度比el-input宽度短
- 数据库关系代数运算之连接
- 摘自迅雷视频网站基于CSS+HTML实现大气清新的蓝色导航
热门文章
- 【机器学习】 - import cv2 opencv安装python
- 【PAT - 甲级1034】Head of a Gang (30分)(并查集)
- 【CodeForces - 208C 】Police Station(单源最短路条数,起点终点建图,枚举顶点)
- 【POJ - 1698】Alice's Chance(网络流最大流,建图)
- 【HDU - 6186】CS Course(按位与,按位或,按位异或的区间统计,二进制拆位)
- Apollo进阶课程⑪ | Apollo地图生产技术
- 吴恩达机器学习作业(五):支持向量机
- 计算机测试怎么提交,Win7电脑怎么测试上传速度?
- wamp php启动不成功,wamp的mysql 启动失败解决
- vue 断开正在发送的请求_vue 发送请求频繁时取消上一次请求