国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

Android數(shù)據(jù)存儲安全實踐

安全 終端安全
本文以Android開發(fā)實踐出發(fā),由淺入深討論Android數(shù)據(jù)的存儲、加密等實現(xiàn)方法供移動開發(fā)進(jìn)行參考。并結(jié)合自身經(jīng)驗探討對Android數(shù)據(jù)安全的一些思考。

一、數(shù)據(jù)存儲安全

Android操作系統(tǒng)自問世以來憑借其開放性和易用性成為當(dāng)前智能手機的主流操作系統(tǒng)之一,作為與人們關(guān)系最密切的智能設(shè)備,越來越多的通訊錄、短信、視頻等隱私數(shù)據(jù)以明文的方式保存在手機中,這些數(shù)據(jù)雖然有鎖屏密碼或者指紋保護(hù),但是由于Android系統(tǒng)自身的安全性,專業(yè)人士可以毫不費力的獲取到手機數(shù)據(jù)鏡像,個人隱私面臨泄露風(fēng)險。另一方面,日益繁榮的移動互聯(lián)網(wǎng)應(yīng)用也是基于用戶數(shù)據(jù)和應(yīng)用程序構(gòu)成,如何保護(hù)這些用戶數(shù)據(jù)安全性是應(yīng)用發(fā)展的基石。隨著人們對數(shù)據(jù)安全重視,如何更好地保護(hù)用戶數(shù)據(jù)成為移動應(yīng)用開發(fā)者的一大挑戰(zhàn)。

本文以Android開發(fā)實踐出發(fā),由淺入深討論Android數(shù)據(jù)的存儲、加密等實現(xiàn)方法供移動開發(fā)進(jìn)行參考。并結(jié)合自身經(jīng)驗探討對Android數(shù)據(jù)安全的一些思考。

[[245440]]

二、常用數(shù)據(jù)存儲方法及實例

1. 文件

存儲數(shù)據(jù)最直接的方法就是以文件的形式保存在手機中,Android開發(fā)主要基于Java語言,因此,在文件讀寫等基本操作相同,文件操作和數(shù)據(jù)流來源于java.IO.*,但是對于Android而言,開發(fā)者需要注意一下幾點:

(1) 文件目錄 Android權(quán)限管理中各個應(yīng)用程序有獨立的存儲空間,存儲結(jié)構(gòu)如下:

(2) 常見文件目錄及路徑

  • /data/data/(packageName)/cache目錄 應(yīng)用緩存文件,目錄獲取方法:File cache = getCacheDir()
  • /data/data/(packageName)/files目錄,即應(yīng)用一般文件,目錄獲取方法:File file = getFilesDir()
  • /data/data/(packageName)/shared_prefs目錄,存放應(yīng)用SharedPreference文件目錄位置
  • /data/data/(packageName)/databases目錄,應(yīng)用數(shù)據(jù)庫目錄(SQLite)
  • /storage/emulated/0/sdcard內(nèi)置sd卡目錄,獲取方法:String sdcard = getInnerSDCardPath()
  • /storage/extSdCard外置sd卡目錄,獲取方法:String exsdcard = Environment.getExternalStorageDirectory().getPath()

在Android手機中,獲取默認(rèn)sd卡目錄方法明確,但是由于Android手機本身不一定支持外置sd卡,或者有/沒有插入外置sd卡,因此在獲取外sd卡時需要留心有坑,一是避免異常,二是分清內(nèi)置和外置。

關(guān)鍵:位置。通過文件保存用戶或者應(yīng)用數(shù)據(jù)時,首先要遵循Android開發(fā)的規(guī)則,在應(yīng)用目錄中根據(jù)文件的類型選擇保存的外置。在sd卡中存放時,避免直接保存在根目錄下,這樣做是避免造成用戶手機文件管理的混亂;二是避免文件被修改、刪除等。

2. 數(shù)據(jù)庫

Android 數(shù)據(jù)庫采用SQLite,SQLite 是一款內(nèi)置到移動設(shè)備上的輕量型的數(shù)據(jù)庫,是遵守ACID(原子性、一致性、隔離性、持久性)的關(guān)聯(lián)式數(shù)據(jù)庫管理系統(tǒng)。Android開發(fā)中可以通過SQLiteOpenHelper或者自定義類SQLiteOpenHelper來實現(xiàn)數(shù)據(jù)存儲查詢修改的功能。此外SQLite數(shù)據(jù)庫支持加密操作,通過sqlite3.exe或者SQLiteConnection均可對數(shù)據(jù)庫進(jìn)行加密操作。SQLiteEncrypt、SQLiteCrypt、SQLCipher等工具提供對數(shù)據(jù)庫的加密操作,但是前兩個需要收費,SQLCipher是開源工具,GitHub地址為: SQLCipher;通過SQLiteConnection類加密方法如下:

  1. SQLiteConnection conn = new SQLiteConnection("Data Source=TestDatabase.sqlite;Version=3;"); conn.SetPassword("password"); conn.open(); 

3. SharedPreferences存儲

SharedPreferences存儲方式是Android中存儲輕量級數(shù)據(jù)的一種方式,內(nèi)部以Map方式進(jìn)行存儲,保存的數(shù)據(jù)以xml格式存放在本地的/data/data/(packagename)/shared_prefs文件夾下。SharedPreference

  1. SharedPreferences pref = getSharedPreferences("test", MODE_PRIVATE); SharedPreferences.Editor editor=pref.edit(); SharedPreferences.Editor editor=pref.edit();editor.putString("name", "root");//保存字符串 editor.putInt("age", 12);//保存整型數(shù)據(jù) editor.commit(); //putXXX 方法中第一個參數(shù)是key,第二參數(shù)為value 
  1. SharedPreferences pref = getSharedPreferences(“setting”, 0); 
  2. pref.getInt("key_name", -1); // getting Integer pref.getFloat("key_name", null); // getting Float pref.getLong("key_name", null); // getting Long //getXXX方法第一個參數(shù)表示key名稱,第二個表示value默認(rèn)值 

三、Android加密算法及實現(xiàn)

DES,對稱加密,同理有3DES,3DES在DES的基礎(chǔ)上進(jìn)行3重加密,以犧牲效率來提高加密安全性。

  1. //DES加密[] encrypt([] data,String key){ 
  2.      { 
  3.          [] bkey = key.getBytes(); 
  4.          // 初始化向量IvParameterSpec iv = IvParameterSpec(bkey); 
  5.          DESKeySpec desKey = DESKeySpec(bkey); 
  6.          // 創(chuàng)建密匙工廠,把DESKeySpec轉(zhuǎn)換成securekey 
  7.          SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(); 
  8.          SecretKey securekey = keyFactory.generateSecret(desKey); 
  9.          Cipher cipher = Cipher.getInstance(); 
  10.          // 用密匙初始化Cipher對象cipher.init(Cipher., securekey, iv); 
  11.          // 現(xiàn)在,獲取數(shù)據(jù)并加密 
  12.          // 加密操作cipher.doFinal(data); 
  13.      } (Throwable e) { 
  14.          e.printStackTrace(); 
  15.      } 
  16.      ; 
  17.  } 
  1. //DES解密[] decrypt([] src, String key) Exception { 
  2.      [] bkey = key.getBytes(); 
  3.      // 初始化向量IvParameterSpec iv = IvParameterSpec(bkey); 
  4.      // 創(chuàng)建一個DESKeySpec對象DESKeySpec desKey = DESKeySpec(bkey); 
  5.      // 創(chuàng)建密匙工廠SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(); 
  6.      // 把DESKeySpec對象轉(zhuǎn)換成SecretKey對象SecretKey securekey = keyFactory.generateSecret(desKey); 
  7.      // Cipher對象實際完成解密操作Cipher cipher = Cipher.getInstance(); 
  8.      // 用密匙初始化Cipher對象cipher.init(Cipher., securekey, iv); 
  9.      // 真正開始解密操作cipher.doFinal(src); 
  10.  } 

AES 高級加密標(biāo)準(zhǔn),用來替代DES的對稱加密算法

  1. //AES 加密[] encrypt([] data, [] key) { 
  2.      { 
  3.          KeyGenerator kgen = KeyGenerator.getInstance();// 創(chuàng)建AES的Key生產(chǎn)者kgen.init(128, SecureRandom(key));// 128位的key生產(chǎn)者SecretKey secretKey = kgen.generateKey();// 根據(jù)key生成密鑰[] enCodeFormat = secretKey.getEncoded();// 返回基本編碼格式的密鑰SecretKeySpec aesKey = SecretKeySpec(enCodeFormat, );// 轉(zhuǎn)換為AES密鑰Cipher cipher = Cipher.getInstance();// 創(chuàng)建密碼器cipher.init(Cipher., aesKey);// 初始化為加密模式的密碼器 
  4.          // 加密cipher.doFinal(data); 
  5.      }(NoSuchAlgorithmException e){ 
  6.          e.printStackTrace(); 
  7.      } (NoSuchPaddingException e) { 
  8.          e.printStackTrace(); 
  9.      }(InvalidKeyException e) { 
  10.          e.printStackTrace(); 
  11.      } (IllegalBlockSizeException e) { 
  12.          e.printStackTrace(); 
  13.      } (BadPaddingException e) { 
  14.          e.printStackTrace(); 
  15.      } 
  16.      ; 
  17.  }//AES 解密[] decrypt([] data, [] key) { 
  18.      { 
  19.          KeyGenerator kgen = KeyGenerator.getInstance();// 創(chuàng)建AES的Key生產(chǎn)者kgen.init(128, SecureRandom(key)); 
  20.          SecretKey secretKey = kgen.generateKey();// 根據(jù)用戶密碼,生成一個密鑰[] enCodeFormat = secretKey.getEncoded();// 返回基本編碼格式的密鑰SecretKeySpec aesKey = SecretKeySpec(enCodeFormat, );// 轉(zhuǎn)換為AES專用密鑰Cipher cipher = Cipher.getInstance();// 創(chuàng)建密碼器cipher.init(Cipher., aesKey);// 初始化為解密模式的密碼器 
  21.          //解密cipher.doFinal(data);   
  22.      } (NoSuchAlgorithmException e) { 
  23.          e.printStackTrace(); 
  24.      } (NoSuchPaddingException e) { 
  25.          e.printStackTrace(); 
  26.      } (InvalidKeyException e) { 
  27.          e.printStackTrace(); 
  28.      } (IllegalBlockSizeException e) { 
  29.          e.printStackTrace(); 
  30.      } (BadPaddingException e) { 
  31.          e.printStackTrace(); 
  32.      } 
  33.      ; 
  34.  } 

對稱加密特點是實現(xiàn)效率快,但是由于加/解密密鑰相同,在密鑰保存、分發(fā)、安全各方面出現(xiàn)許多問題,例如密鑰管理,密鑰泄露。基于此,將加密密鑰和解密密鑰分開,形成客戶端端使用公鑰加密,服務(wù)端用私鑰解密的非對稱加密,將加解密密鑰分開,加密密鑰不必?fù)?dān)心泄露風(fēng)險。常用的非對稱加密算法如RSA。

RSA加解密實現(xiàn)

  1. // 生成 public and private keysKeyPair buildKeyPair() NoSuchAlgorithmException { 
  2.      keySize = 2048
  3.      KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance(); 
  4.      keyPairGenerator.initialize(keySize); 
  5.  } 
  6. //RSA 加密 [] encrypt(PrivateKey privateKey, [] data) Exception { 
  7.      Cipher cipher = Cipher.getInstance(); 
  8.      cipher.init(Cipher., privateKey); 
  9.      //加密cipher.doFinal(data); 
  10.  } 
  11. //RSA 解密 [] decrypt(PublicKey publicKey, [] enData) Exception { 
  12.      Cipher cipher = Cipher.getInstance(); 
  13.      cipher.init(Cipher., publicKey); 
  14.      //解密cipher.doFinal(enData); 
  15.  } 

在常用數(shù)據(jù)加密方法中,通常也會遇到md5、sha-256算法等,但是這些算法是明文的hash值,哈希算法和加密算法的本質(zhì)是是否可逆,即由密文通過運算得到明文。特別注意,base64編碼是一種編碼格式,除了增加可讀性難度沒有任何安全性。

四、存儲安全進(jìn)階

在上文中介紹了常用的Android數(shù)據(jù)存儲方式和加密算法,通過直觀的介紹進(jìn)入到Android存儲安全中,在實際的應(yīng)用中數(shù)據(jù)存儲安全性問題是一個復(fù)制的系統(tǒng)性問題,不僅僅表現(xiàn)在開發(fā)中,從數(shù)據(jù)結(jié)構(gòu)到編碼以及密鑰的生成和管理都會涉及到數(shù)據(jù)存儲安全。

文件的隱藏 Android創(chuàng)建隱藏文件或者文件夾,在文件名或者文件夾名字前加一個“.”號即可(這里是英文輸入法下的.號),隱藏文件/文件夾可直接進(jìn)行讀寫。這是一個容易被開發(fā)者忽略的問題,乍一看好像沒什么難度,問題在于開發(fā)者和用戶視角問題。由于Android手機默認(rèn)帶文件查看器,因此用戶可以輕松查看、修改sdcard目錄下的文件,當(dāng)使用隱藏文件是最大的作用是避免用戶誤操作。

密鑰的保存 如果將密鑰保存到手機文件中,或者通過硬編碼的方式寫在代碼中,容易被逆向出來,在通常情況下,采用對稱加密密鑰需要保存在用戶手機中,這和安全性想違背。通常最好的方式是不要保有密鑰,通過固定數(shù)據(jù)或者字符串做加密密鑰因子,例如用戶唯一賬號屬性等。

編碼方式 Android代碼主要有Java編碼,打包文件時Java代碼打包成dex文件防到安裝包文件中,但是dex文件容易被逆向回smali代碼或者Java文件。雖然目前混淆和加殼甚至是虛擬機保護(hù)(VMP)技術(shù)已經(jīng)很成熟,簡單逆向工作無法獲取代碼邏輯和硬編碼字符串,但是Java代碼依然存在很高的安全風(fēng)險。因此,將加解密相關(guān)操作通過Native代碼實現(xiàn)很有必要,不僅保證效率而且在so保護(hù)技術(shù)之上安全性更高。

五、Android數(shù)據(jù)安全思考

隨著移動互聯(lián)網(wǎng)深入發(fā)展,目前移動應(yīng)用正在發(fā)生質(zhì)的改變。相比繁榮初始的粗狂、野蠻,現(xiàn)在的移動應(yīng)用開始考慮安全和質(zhì)量,特別是當(dāng)前我國互聯(lián)網(wǎng)信息安全的大形勢,數(shù)據(jù)安全關(guān)乎企業(yè)和應(yīng)用的生存的前提,保護(hù)應(yīng)用數(shù)據(jù)安全至關(guān)重要。在Android數(shù)據(jù)存儲安全中,由于Android系統(tǒng)的安全機制,用戶獲取root權(quán)限后可以訪問手機所有目錄,包括應(yīng)用私有目錄,因此,數(shù)據(jù)存儲要考慮到一個白盒環(huán)境,或者非可信環(huán)境。這種情況下,數(shù)據(jù)加密的密鑰成為關(guān)鍵。一機一密、動態(tài)密鑰、密鑰白盒等手段各有優(yōu)缺點。一機一密需要保護(hù)密鑰生成方法邏輯;動態(tài)密鑰需要考慮密鑰時效性,有效性以及鏈路安全;密鑰白盒由于目前沒有廣泛認(rèn)可,在兼容性安全性方面有待考驗。

責(zé)任編輯:趙寧寧 來源: FreeBuf
相關(guān)推薦

2018-12-25 09:26:28

2020-07-30 11:39:06

網(wǎng)絡(luò)攻擊數(shù)據(jù)存儲數(shù)據(jù)安全

2021-01-20 10:53:41

云計算云存儲云遷移

2020-02-07 09:32:08

數(shù)據(jù)安全數(shù)據(jù)資產(chǎn)管理安全風(fēng)險

2024-04-22 07:56:32

數(shù)據(jù)倉庫數(shù)據(jù)中臺數(shù)據(jù)服務(wù)

2023-08-07 08:40:24

2023-02-13 14:01:32

2013-08-14 09:33:38

數(shù)據(jù)安全信息安全

2022-05-16 08:45:05

數(shù)據(jù)質(zhì)量數(shù)據(jù)安全

2018-06-07 16:33:31

大數(shù)據(jù)冷熱數(shù)據(jù)存儲平臺

2012-04-16 15:08:33

2023-01-27 15:41:24

2013-04-27 10:35:09

大數(shù)據(jù)全球峰會大數(shù)據(jù)安全

2022-02-10 10:51:35

數(shù)據(jù)庫

2014-11-07 10:11:12

2017-01-20 14:10:47

2018-01-15 08:52:35

2018-09-20 10:10:34

2023-03-17 08:04:15

云存儲安全Veritas
點贊
收藏

51CTO技術(shù)棧公眾號

亚洲成av人片在线观看| 欧美日韩免费观看中文| 精品国产一区二区三区久久久久久| 伊人久久大香线蕉综合网站| 欧美一区二区三区……| 精品日韩欧美一区| 日本一区二区三区www| 亚洲专区免费| www.国产在线视频| 久久久三级国产网站| av大片免费看| 中国av一区| 在线观看日韩毛片| av久久久久久| 超碰97久久| 欧美色图在线观看| 日本免费高清一区二区| 成人婷婷网色偷偷亚洲男人的天堂| 色综合久久综合网97色综合 | 日本va欧美va瓶| 最近2019中文字幕在线高清| 久久久精品一区二区毛片免费看| 日韩中文字幕视频在线| 欧美激情偷拍自拍| 精品一区2区三区| 国产欧美久久久精品影院| 成人毛片av在线| 欧美专区第一页| 国产成人在线免费| 亚洲天堂二区| 精品中文字幕在线2019| 久久国产日本精品| 免费看av大片| 久久精品久久久久电影| 999在线观看精品免费不卡网站| 日韩视频第二页| 欧美大肚乱孕交hd孕妇| 俺要去色综合狠狠| 青青在线视频免费| 精品视频一区在线视频| 国产精品日本欧美一区二区三区| 天天夜夜亚洲| 欧美夜福利tv在线| 久久久久九九视频| 99久久精品免费看国产小宝寻花| 国产伦精品一区二区三区高清版| 亚洲欧洲成人自拍| 亚洲男人在线| 国产一级爱c视频| 亚洲欧美制服综合另类| 男女男精品视频网| freexxx性亚洲精品| 欧美理论一区二区| 日韩你懂的在线观看| 国产精品久久久一区二区| 午夜成在线www| 91久久精品久久国产性色也91| 国产精品视频免费| 榴莲视频成人app| 国产精品涩涩涩视频网站| 色偷偷偷亚洲综合网另类| 97se狠狠狠综合亚洲狠狠| 最新日韩三级| 免费日韩中文字幕| 欧美自拍偷拍午夜视频| 蜜桃麻豆91| 久久精品72免费观看| 成人自拍网站| 男男gay无套免费视频欧美| 黄色一级视频片| 欧美日韩xxx| 洋洋成人永久网站入口| 欧美午夜视频| 欧美一级二级视频| 在线播放你懂得| 日韩精品久久一区二区| 国产精品卡一卡二| 91精品国产乱码久久久竹菊| 在线观看入口黄最新永久免费国产| 另类小说综合网| 中文综合在线观看| 一本到高清视频免费精品| 精品写真视频在线观看| 中文字幕精品影院| 99热99re6国产在线播放| 国内精品免费午夜毛片| 色婷婷国产精品久久包臀| 高清不卡一区二区| 中文字幕一区二区三区久久网站| 麻豆电影在线播放| 国产免费网址| 国产一二三区在线播放| 91探花福利精品国产自产在线| 亚洲成人av片| 婷婷中文字幕综合| 精品一区二区三区免费| 亚洲综合小说| 超碰在线成人| 日本在线一区二区| 色黄网站在线观看| 国产精品视频一区二区久久| 啊啊啊好爽视频| 能在线观看的av| 国产精品国三级国产av| 国外成人免费视频| 国产高清在线精品一区二区三区| 777777777亚洲妇女| www.日韩欧美| 精品成人佐山爱一区二区| 在线免费观看日韩欧美| 色婷婷久久久亚洲一区二区三区| 亚洲女同一区二区| 国产精品麻豆欧美日韩ww| 国产精品免费网站在线观看| 国产亲近乱来精品视频| 国产欧美一区二区三区网站| 成人免费视频视频在线观看免费| 免费观看一级特黄欧美大片| 一本综合久久| 黄色免费在线网站| 女人让男人操自己视频在线观看| 蜜臀av在线播放| 性欧美freehd18| 婷婷久久免费视频| 国产在线视频欧美一区| 精品国产亚洲一区二区三区大结局 | 黄色av日韩| 影音先锋久久久| 青青草国产成人99久久| 天堂资源在线中文精品| 中文字幕在线三区| 国产在线播放观看| 欧洲激情一区二区| 一本色道久久| 蜜桃av在线播放| 国产成人三级视频| 久久国产精品99国产精| 色综合欧美在线视频区| 在线成人国产| 久久高清国产| 久久综合九色综合欧美98| 亚洲人成小说网站色在线| 欧美亚洲国产一区二区三区 | 国产一区一区三区| 美女喷白浆视频| 黄网在线免费| 日韩一级二级| 欧美高清一区| 99久久伊人久久99| 在线观看亚洲a| 一区二区三区高清国产| 成人久久久久爱| 99在线观看视频免费| 免费在线性爱视频| 日韩有码一区| 久久99精品久久久久久久久久久久 | 日韩精品第一页| 91成人福利在线观看| 黄色在线网站噜噜噜| 蜜桃成人av| 91免费视频观看| 日韩女优毛片在线| 99久久精品免费看国产一区二区三区 | 久久久久久www| h片在线免费观看| 神马久久一区二区三区| 久久人人爽爽爽人久久久| 日韩电影大片中文字幕| 91网免费观看| 校园春色综合| 亚洲女娇小黑人粗硬| 久久久综合九色合综国产精品| 欧美一级二级在线观看| 精品一区二区不卡| 国产色在线 com| 亚洲国产免费看| 在线观看网站黄不卡| 日本精品视频网站| 国产无遮挡又黄又爽免费软件| 欧美在线一级| 91小视频免费看| 精品国产区一区二区三区在线观看 | 国产aⅴ精品一区二区三区久久| 国产盗摄一区二区三区| 日韩精品免费看| 在线播放欧美女士性生活| 国产女人水真多18毛片18精品视频 | 亚洲免费av在线| 少妇高潮久久久久久潘金莲| 自拍偷拍亚洲色图欧美| 一区二区视频免费完整版观看| 日韩电影免费在线看| 日韩视频第一页| 成人狠狠色综合| 欧美日本不卡高清| 亚洲精品一线二线三线无人区| 欧美一级特黄aaaaaa在线看片| 91精品一区| 日本精品视频一区二区| 国产精品h视频|