移動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進行加密.

  1. client使用公鑰加密password,得到加密串,然后將其發送到服務端.
  2. 服務端使用私鑰解密password。進行驗證,
  3. 登錄成功后,client將加密串保存到本地,便于下次自己主動登錄;
使用非對稱加密比較可靠。即使加密串被泄露也無法得到password.

2.假設你僅僅是負責client。對服務端無能為力,那么你可能僅僅能使用對稱加密了.(如你正在為學校圖書館寫個client。你還想設置自己主動登錄。那么你本地僅僅能使用對稱加密了,將加密串保存到本地。然后下次自己主動登錄時。從數據庫取出加密串然后解密...服務端僅僅識別原始的password)
這樣的情況。你僅僅能考慮怎樣生成加密密鑰,以及怎樣保存密鑰,怎樣混淆.
考慮了一種方法:
加解密函數 DES(passwd,key,encode);
str1 = ?DES(passwd,key,encode);
str2 = ?DES(key,str1,encode);
本地數據庫中保存 str1:str2.
解密時,str2以str1解密得到key.
然后。str1以key解密得到passwd.
非對稱加密僅僅能以這樣的邏輯上的復雜度添加password的強度.

3. 使用JNI加解密。

另參考文章:
http://blog.csdn.net/hengyunabc/article/details/34623957

android中使用jni對字符串加解密實現分析

加鹽password哈希:怎樣正確使用





轉載于:https://www.cnblogs.com/jhcelue/p/7190220.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/455165.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/455165.shtml
英文地址,請注明出處:http://en.pswp.cn/news/455165.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

extjs2.0 文件上傳_extjs數據存儲與傳輸

本章內容qExt.data簡介qExt.data.ConnectionqExt.data.RecordqExt.data.Storeq常用proxyq常用readerq高級storeqEXT中的Ajaxq關于scope和createDelegate()qDWR與EXT整合10.1Ext.data簡介Ext.data在命名空間中定義了一系列store、reader和proxy。Grid和ComboxBox都是以Ext.data為…

盤點key value在各個編程語言中的類型

個人博客點這里 起步 在編程語言中,有這么一種數據類型,我們經常會使用到,他就是類似于json的鍵值對類型 那么今天我們就對比一下,在各大編程語言中的key value類型的特點 main python key value 叫做字典 dict類型 聲明 字典操作 以鍵值對方式存在的無序數據的組合就是…

音頻格式詳解 CD WAV MP3 WMA MIDI RM RA OGG VOF AAC M4A APE FLAC TAK TTA MV RealAudio AIFF AU

以下是常見音頻文件格式的特點。 要在計算機內播放或是處理音頻文件&#xff0c;也就是要對聲音文件進行數、模轉換&#xff0c;這個過程同樣由采樣和量化構成&#xff0c;人耳所能聽到的聲音&#xff0c;最低的頻率是從20Hz起一直到最高頻率20KHZ&#xff0c;20KHz以上人耳是聽…

Spring MVC-表單(Form)標簽-下拉框(Dropdown)示例(轉載實踐)

以下內容翻譯自&#xff1a;https://www.tutorialspoint.com/springmvc/springmvc_dropdown.htm 說明&#xff1a;示例基于Spring MVC 4.1.6。 以下示例顯示如何使用Spring Web MVC框架在表單中使用Dropdown。首先&#xff0c;讓我們使用Eclipse IDE&#xff0c;并按照以下步驟…

vuex的命名空間有哪些_Vuex在vue路由器中訪問命名空間模塊的getter

我試圖通過檢查用戶是否經過身份驗證來保護我的路由&#xff0c;這是示例路由&#xff1a;{path: /intranet,component: search,meta: { requiresAuth: true },props: {tax: type,term: intranet-post,name: Intranet}},我正在這樣設置警衛&#xff1a;router.beforeEach((to, …

阿里巴巴中文站架構設計實踐(何崚)圖書

阿里巴巴中文站架構實踐 何崚阿里巴巴 全文地址:阿里巴巴中文站架構設計實踐(何崚).pdf 更多課件可到:這里查看 后續內容還在更新…

使用sqlite3創建數據庫表的時候須要注意

使用sqlite3創建數據庫表的時候須要注意&#xff1a; 1. 不能使用純數字 2. 不能帶有"-",""等字符。也不能以數字打頭。一、以下是log打出來的信息&#xff1a; DB Error: 1 "unrecognized token: "47464636265757265763393573649"" D…

物聯網世界的承諾與挑戰

最初參與到與物聯網&#xff08;Internet of Things / IoT&#xff09;相關的行業對話時&#xff0c;我對整個行業的發展充滿疑問。“ 物聯網”和 “萬聯網”&#xff08;Internet of Everything&#xff09;有什么區別&#xff1f;這場變革現今是處于啟蒙階段&#xff0c;亦或…

音樂文件基本格式,wave,mod,midi,mp3,wma,flac

經典的WAVE WAVE文件作為最經典的Windows多媒體音頻格式&#xff0c;應用非常廣泛&#xff0c;它使用三個參數來表示聲音&#xff1a;采樣位數、采樣頻率和聲道數。 聲道有單聲道和立體聲之分&#xff0c;采樣頻率一般有11025Hz&#xff08;11kHz&#xff09;、22050Hz&#xf…

bilibili go框架_最好的開發語言一定是那位嗎?Go語言有話說

魯迅先生說過&#xff0c;所有能用 JS 寫的前端項目最終都會被用 JS 重寫一遍&#xff0c;所有能用 Go 寫的后端項目最終也都會被用 Go 重寫一遍。作為一名開發者&#xff0c;周六的我們能做什么呢&#xff1f;是因為產品經理的各種需求在加班嗎&#xff1f;給你說了實現不了實…

關于虛擬機棧的理解

虛擬機棧 虛擬機棧出現的背景 由于跨平臺性的設計,Java的指令都是根據棧來設計的. 不同平臺CPU架構不同,所以不能設置為基于寄存器的 優點是跨平臺,指令集小,編譯器容易實現,缺點是性能下降,實現同樣的功能需要更多的指令. 有不少Java開發人員一提到Java內存結構,就會非常粗…

抓取各個瀏覽器引擎關鍵字,,百度學術關鍵字

百度學術 $list_arr getbaiduxueshu($row[name]); $list_arr explode((,$list_arr); $list_arr explode(),$list_arr[1]); $list_arr json_decode($list_arr[0]); $list_arr $list_arr->s; //百度學術平臺熱詞地址function getbaiduxueshu($keyname 100){ $url http:…

wave格式分析,wave音頻文件格式分析配程序

wav文件格式分析詳解 程序如上一篇博文 一、綜述 WAVE文件作為多媒體中使用的聲波文件格式之一&#xff0c;它是以RIFF格式為標準的。RIFF是英文Resource Interchange File Format的縮寫&#xff0c;每個WAVE文件的頭四個字節便是“RIFF”。 WAVE文件是由若干個Chunk組成…

poi設置word表格單元格寬度_java poi如何設置word的頁面的大小和水平方向?

展開全部你好&#xff0c;試試以下代碼行不行。packagecom.sample;importjava.awt.color;importjava.io.fileoutputstream;importjava.io.ioexception;importcom.lowagie.text.cell;importcom.lowagie.text.document;importcom.lowagie.text.documentexception;importcom.lowag…

時間通用方法

import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date;import org.apache.commons.lang3.time.DateFormatUtils;/** * 日期工具類, 繼承org.apache.commons.lang.time.DateUtils類 */ public class DateUtils extends org.apache.commo…

Python-MongoDB的驅動安裝、升級

安裝pip&#xff0c;并通過此來安裝pymongo–Python mongodb驅動 1、下載pip安裝包&#xff0c;下載地址&#xff1a;http://pypi.python.org/packages/source/p/pip/pip-1.0.2.tar.gz#md547ec6ff3f6d962696fe08d4c8264ad49 2、解壓安裝&#xff1a; tar -zxf pip.1.0.2.tar.gz…

python5_python5

python2&python31.python2中print可加括號可不加括號&#xff0c;python3中print一定要加括號。2.python2中有range(),也有xrange(),python中只有range()。生成器。3.Python2中raw_input(),python3中input()。,,is賦值比較是否相等is 比較內存地址&#xff0c;id(內容)li1[…

單例設計模式1

單例 所謂單例設計模式,即時采取一定的方法保證在整個軟件系統當中,對于某個類只能存在一個對象實例,并且該類只提供一個其對象實例的方法(靜態方法) 惡漢式 優缺點說明: 優點:這種寫法比較簡單,就是在類裝載的時候就完成實例化.避免了線程同步問題 缺點: 在類裝載的時候就…

SJXXX串口擴展芯片 4串口芯片 UART串口芯片

SJXX串口擴展芯片1 概述SJ000是一款具備I2C總線/SPI總線/UART接口的四通道異步收發器件&#xff0c;通過模式選擇使得該器件工作于以上任何一種主接口模式下。器件的四個通道UART可提供高達2Mbps的數據率&#xff0c;低功耗模式和睡眠電流。每個通道含有一個接收器和一個發送器…

MPLS服務合同到期了,是否該續簽?

當考慮是否要更新現有MPLS服務合同以及續簽多久時&#xff0c;你需要著眼于從價格到部署速度的方方面面。簡而言之&#xff0c;如果你還沒有獲取一些與軟件定義廣域網有關技術的經驗&#xff0c;即使用寬帶或取代MPLS服務&#xff0c;那么你就沒辦法在未來幾個月之內棄用MPLS。…