当前位置:首页 » 数据仓库 » 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包里面有风险),同时监控敏感数据的异常行为。

加固可以在一定程度上保护自己核心代码算法,提高破解/盗版/二次打包的难度,缓解代码注入/动态调试/内存注入攻击等
但也对应用的兼容性有一定影响,加壳技术不行的话,还会影响程序运行效率.

目前市面上有很多第三方加固的平台, 如果新应用发布前需要扫描或者加固的话,可以先试试免费的,例如腾讯御安全,建议自己先去扫描测试下。