當前位置:首頁 » 數據倉庫 » android資料庫安全
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

android資料庫安全

發布時間: 2022-04-03 04:46:17

1. 怎麼測試給資料庫加密的android模塊

1.概述

SharedPreferences是Android提供用來存儲一些簡單配置信息的機制,其以KEY-VALUE對的方式進行存儲,以便我們可以方便進行讀取和存儲。主要可以用來存儲應用程序的歡迎語、常量參數或登錄賬號密碼等。

2.實例

(1)創建項目SharedPreferencesDemo項目

(2)編輯主界面的布局文件main.xml如下:

android:orientation="vertical"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

>

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:text="SharedPreferences,是Android提供用來存儲一些簡單的配置信息的一種機制。"

/>

(3)創建AES加解密工具類AESEncryptor.java

其中主要提供加密encrypt、解密decrypt兩個方法。(AES加解密演算法具體大家可以到網上搜索相關資料)

以下為該類文件的源碼:

package ni.demo.sharedpreferences;

import java.security.SecureRandom;

import javax.crypto.Cipher;

import javax.crypto.KeyGenerator;

import javax.crypto.SecretKey;

import javax.crypto.spec.SecretKeySpec;

/**

* AES加密器

* @author Eric_Ni

*

*/

public class AESEncryptor {

/**

* AES加密

*/

public static String encrypt(String seed, String cleartext) throws
Exception {

byte[] rawKey = getRawKey(seed.getBytes());

byte[] result = encrypt(rawKey, cleartext.getBytes());

return toHex(result);

}

/**

* AES解密

*/

public static String decrypt(String seed, String encrypted) throws
Exception {

byte[] rawKey = getRawKey(seed.getBytes());

byte[] enc = toByte(encrypted);

byte[] result = decrypt(rawKey, enc);

return new String(result);

}

private static byte[] getRawKey(byte[] seed) throws Exception {

KeyGenerator kgen = KeyGenerator.getInstance("AES");

SecureRandom sr = SecureRandom.getInstance("SHA1PRNG");

sr.setSeed(seed);

kgen.init(128, sr); // 192 and 256 bits may not be available

SecretKey skey = kgen.generateKey();

byte[] raw = skey.getEncoded();

return raw;

}

private static byte[] encrypt(byte[] raw, byte[] clear) throws Exception
{

SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");

Cipher cipher = Cipher.getInstance("AES");

cipher.init(Cipher.ENCRYPT_MODE, skeySpec);

byte[] encrypted = cipher.doFinal(clear);

return encrypted;

}

private static byte[] decrypt(byte[] raw, byte[] encrypted) throws
Exception {

SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");

Cipher cipher = Cipher.getInstance("AES");

cipher.init(Cipher.DECRYPT_MODE, skeySpec);

byte[] decrypted = cipher.doFinal(encrypted);

return decrypted;

}

public static String toHex(String txt) {

return toHex(txt.getBytes());

}

public static String fromHex(String hex) {

return new String(toByte(hex));

}

public static byte[] toByte(String hexString) {

int len = hexString.length()/2;

byte[] result = new byte[len];

for (int i = 0; i < len; i++)

result[i] = Integer.valueOf(hexString.substring(2*i, 2*i+2),
16).byteValue();

return result;

}

public static String toHex(byte[] buf) {

if (buf == null)

return "";

StringBuffer result = new StringBuffer(2*buf.length);

for (int i = 0; i < buf.length; i++) {

appendHex(result, buf[i]);

}

return result.toString();

}

private final static String HEX = "0123456789ABCDEF";

private static void appendHex(StringBuffer sb, byte b) {

sb.append(HEX.charAt((b>>4)&0x0f)).append(HEX.charAt(b&0x0f));

}

}

(4)編輯SharedPreferencesDemo.java

源碼如下:

package ni.demo.sharedpreferences;

import android.app.Activity;

import android.content.SharedPreferences;

import android.content.SharedPreferences.Editor;

import android.os.Bundle;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.Button;

import android.widget.EditText;

import android.widget.Toast;

public class SharedPreferencesDemo extends Activity {

public static final String MY_PREFERENCES = "MY_PREFERENCES";
//Preferences文件的名稱

public static final String MY_ACCOUNT = "MY_ACCOUNT"; //

public static final String MY_PASSWORD = "MY_PASSWORD";

private EditText edtAccount;

private EditText edtPassword;

private Button btnClear;

private Button btnExit;

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

edtAccount = (EditText)findViewById(R.id.edtAccount);

edtPassword = (EditText)findViewById(R.id.edtPassword);

//獲取名字為「MY_PREFERENCES」的參數文件對象,並獲得MYACCOUNT、MY_PASSWORD元素的值。

SharedPreferences sp = this.getSharedPreferences(MY_PREFERENCES, 0);

String account = sp.getString(MY_ACCOUNT, "");

String password = sp.getString(MY_PASSWORD, "");

//對密碼進行AES解密

try{

password = AESEncryptor.decrypt("41227677", password);

}catch(Exception ex){

Toast.makeText(this, "獲取密碼時產生解密錯誤!", Toast.LENGTH_SHORT);

password = "";

}

//將賬號和密碼顯示在EditText控制項上。

edtAccount.setText(account);

edtPassword.setText(password);

//獲取"清空"按鈕的對象,並為其綁定監聽器,如被點擊則清空賬號和密碼控制項的值。

btnClear = (Button)findViewById(R.id.btnClear);

btnClear.setOnClickListener(new OnClickListener(){

@Override

public void onClick(View arg0) {

edtAccount.setText("");

edtPassword.setText("");

}

});

//獲取「退出」按鈕的對象,並為其綁定監聽,如被點擊則退出程序。

btnExit = (Button)findViewById(R.id.btnExit);

btnExit.setOnClickListener(new OnClickListener(){

@Override

public void onClick(View arg0) {

SharedPreferencesDemo.this.finish();

}

});

}

@Override

protected void onStop() {

super.onStop();

//獲得賬號、密碼控制項的值,並使用AES加密演算法給密碼加密。

String account = edtAccount.getText().toString();

String password = edtPassword.getText().toString();

try{

password = AESEncryptor.encrypt("41227677", password);

}catch(Exception ex){

Toast.makeText(this, "給密碼加密時產生錯誤!", Toast.LENGTH_SHORT);

password = "";

}

//獲取名字為「MY_PREFERENCES」的參數文件對象。

SharedPreferences sp = this.getSharedPreferences(MY_PREFERENCES, 0);

//使用Editor介面修改SharedPreferences中的值並提交。

Editor editor = sp.edit();

editor.putString(MY_ACCOUNT, account);

editor.putString(MY_PASSWORD,password);

editor.commit();

}

}

(5)效果測試

首先,在AVD我們可以看到如下界面,在兩個控制項上我們分別輸入abc和123456。

接著,我們打開DDMS的File
Explore可以看到在data->data->ni->shared_prefs下面產生了一個名字叫做MY_PREFERENCES.xml的文件,該文件就是用來存儲我們剛才設置的賬號和密碼。

將其導出,並打開,可以看到如下內容:

abc這說明我們可以成功將賬號和加密後的密碼保存下來了。

最後,我們點擊「退出」按鈕將應用程序結束掉,再重新打開。我們又再次看到我們退出前的界面,賬號密碼已經被重新讀取出來。

文章的最後,我們進入Android API手冊,看看關於SharedPreferences的介紹:

Interface for accessing and modifying preference data returned by
getSharedPreferences(String, int). For any particular set of preferences, there
is a single instance of this class that all clients share. Modifications to the
preferences must go through an SharedPreferences.Editor object to ensure the
preference values remain in a consistent state and control when they are
committed to storage.

SharedPreferences是一個用來訪問和修改選項數據的介面,通過getSharedPreferences(Stirng,int)來獲得該介面。對於任何特別的選項集,只能有一個實例供所有客戶端共享。針對選項參數的修改必須通過一個SharedPreferences.Editor對象來進行,以保證所有的選項值保持在一個始終如一的狀態,並且通過該對象提交存儲。

可見,SharedPreferences操作選項文件時是線程安全的。

2. AndroidAPP與後台數據傳輸怎麼保證數據安全

使用Https請求相對安全一些,他是以安全為目標的HTTP通道,簡單講是HTTP的安全版。

3. android sqlitedatabase 的操作是同步線程安全的嗎

是的,默認的情況下,你可以把insert,update這些函數看作原子操作。可以參考這一篇

網頁鏈接

但是你需要注意,你不能多次調用close函數,否則會產生異常。

4. android sqlite資料庫怎麼加密

按我的理解,你可以做一個加密解密的函數,數據存進資料庫之前都加密一下,取出來的時候再解密,這樣就算別人看到了資料庫里的數據,也完全不知道是什麼意思 查看原帖>>

5. android 資料庫注入漏洞 怎麼解決

public class DatabaseHelper extends SQLiteOpenHelper { /** * 刪除資料庫 * * @param context * @return */ public boolean deleteDatabase(Context context) { return context.deleteDatabase(name); } }

6. 有熟悉Sqlite的嗎請教個Android Sqlite安全性方面的問題

1.這個基本會發生的2.3 你要知道,一個APP僅僅只能訪問自己的數據,你知道資料庫文件放在哪兒嗎? 在這個下面/data/data/報名/database/,所以就保證了,每一個APP的資料庫是不影響的,每一個APP相互調用自己的資料庫文件,所以你說的2、3問題基本可以忽略了。如果你想看的/data/data/報名/database/的話,記得把你的手機root後就可以看到了,4.不敏感,SQL都貌似是不敏感的 查看原帖>>

7. android安全性問題都有哪些

1 目前漏洞存在於安卓內置的稱之為Stagefright,的媒體播放工具中。
2 只需向安卓設備發送一條簡單的文本消息,黑客就可以取得該設備的全部許可權,進而竊取各類數據,包括信用卡或個人信息。
3 雖然開源的特點使其成為蘋果iOS的有力競爭對手,但安卓系統多年來一直在安全性方面飽受質疑。
4 依據安全公司F-Secure的說法,今年第一季度,99%的移動端惡意軟體都出現在安卓設備上。

8. 請問android最安全的數據存儲方式是什麼

android存儲有很多種方式的,比如你用的這種sharedpreferences,還有sqlite,sdcard,還有就是雲端了,其實沒有什麼安全不安全,一般的重要數據會進行加密的,加密方式有很多種,比如MD5,base64,AES等,很多,一般加密就不容易破解了。普通的數據無所謂加密不加密。

9. 怎麼保證android應用裡面的,調用伺服器的數據的介面的安全性

android 自帶json 解析...不要導包....

10. 為什麼安卓數據安全會泄露

app發布前,最好做一下掃描和加固,應用掃描可以通過靜態代碼分析、動態數據跟蹤,定位出風險代碼(目前好多都是只告訴APK包裡面有風險),同時監控敏感數據的異常行為。

加固可以在一定程度上保護自己核心代碼演算法,提高破解/盜版/二次打包的難度,緩解代碼注入/動態調試/內存注入攻擊等
但也對應用的兼容性有一定影響,加殼技術不行的話,還會影響程序運行效率.

目前市面上有很多第三方加固的平台, 如果新應用發布前需要掃描或者加固的話,可以先試試免費的,例如騰訊御安全,建議自己先去掃描測試下。