精华内容
下载资源
问答
  • 在Android中通常使用SQLCipher对数据库进行加密。 SQLCipher是一个开源的SQLite加密扩展,支持对db文件进行256位的AES加密。 SQLCipher 官网: https://www.zetetic.net/sqlcipher/ 目前使用的是...

    在Android中通常使用SQLCipher对数据库进行加密。

    SQLCipher是一个开源的SQLite加密扩展,支持对db文件进行256位的AES加密。

    SQLCipher 官网:

    https://www.zetetic.net/sqlcipher/

    目前使用的是greenDaoAndroid数据库包,这个包目前是支持SQLCipher加密功能的,而且使用起来相当简单。

    首先,在 Android 上添加 SQLCipher 依赖,在 build.gradle 中的 dependencies 里添加

    dependencies {
      /* 数据库加密框架 */
      implementation 'net.zetetic:android-database-sqlcipher:3.5.7@aar'
    }

    然后,需要在使用时设置一个密码就行了,使用起来没什么难度

    // 初始化数据库信息
    devOpenHelper = new MyOpenHelper(MyApp.getContext(), DATABASE_NAME, null);
    //mDaoMaster = new DaoMaster(devOpenHelper.getWritableDatabase());
    //数据库加密
    mDaoMaster = new DaoMaster(devOpenHelper.getEncryptedWritableDb(DATABASE_SQLCIPHER_PASSWORD));

    就这样,数据库加密就做完了。

     

    但是,这仅仅是对新建数据库来说,如果你之前就有已经在使用中的数据库,那么如果你直接运行项目,就会直接报错,数据库打开失败

    Caused by: net.sqlcipher.database.SQLiteException: file is encrypted or is not a database: , while compiling: select count(*) from sqlite_master;

    这是因为你你之前的数据库没有进行加密,现在是直接使用已加密的方法去使用,这样肯定是不行的。

    当然,解决起来也不难,你只需要对已有的数据库进行加密,然后在调用就行了。

    对已有数据库进行加密的方法如下:

    /**
     * 对已有未加密数据库进行加密处理
     */
    public class DataBaseEncrypt {
        private static volatile DataBaseEncrypt nInstance;
        private Boolean isOpen = true;
    
        public DataBaseEncrypt() {
        }
    
        public static DataBaseEncrypt getInstences() {
            if (nInstance == null) {
                synchronized (DataBaseEncrypt.class) {
                    if (nInstance == null) {
                        nInstance = new DataBaseEncrypt();
                    }
                }
            }
            return nInstance;
        }
    
          /**
         * 如果已有未加密的数据库旧表 先加密已有未加密数据库
         *
         * @param context
         * @param passphrase
         */
        public void encrypt(Context context, String dbName, String passphrase) {
            File file = context.getDatabasePath(dbName);
            if (file.exists() && isOpen) {
                try {
                    //创建临时数据库文件
                    File newFile = File.createTempFile("sqlcipherutils", "tmp", context.getCacheDir());
                    //对没有加密的数据库进行加密操作
                    SQLiteDatabase db = SQLiteDatabase.openDatabase(file.getAbsolutePath(), "", null, SQLiteDatabase.OPEN_READWRITE);
                    db.rawExecSQL(String.format("ATTACH DATABASE '%s' AS encrypted KEY '%s';", newFile.getAbsolutePath(), passphrase));
                    db.rawExecSQL("SELECT sqlcipher_export('encrypted')");
                    db.rawExecSQL("DETACH DATABASE encrypted;");
                    int version = db.getVersion();
                    db.close();
    
                    //对已加密过的数据库设置版本号
                    db = SQLiteDatabase.openDatabase(newFile.getAbsolutePath(), passphrase, null, SQLiteDatabase.OPEN_READWRITE);
                    db.setVersion(version);
                    db.close();
                    file.delete();
                    //对加密后的数据库进行重新命名
                    newFile.renameTo(file);
                    isOpen = false;
                } catch (Exception e) {
                    isOpen = false;
                }
            }
        }
    
    }

    然后,在调用时如果能够正常调用直接返回,如果不能说明数据库没有加密过,直接调用加密方法

        /**
         * 如果对已有数据进行加密,需要先对原有数据库进行加密操作
         * @return
         */
        public synchronized Database getWritableDatabase() {
            try {
                return devOpenHelper.getEncryptedWritableDb(DATABASE_SQLCIPHER_PASSWORD);
            } catch (Exception e) {
                e.printStackTrace();
                //尝试加密后再打开
                DataBaseEncrypt.getInstences().encrypt(MyApp.getContext(), DATABASE_NAME, DATABASE_SQLCIPHER_PASSWORD);
                return devOpenHelper.getEncryptedWritableDb(DATABASE_SQLCIPHER_PASSWORD);
            }
        }

    最后,替换一下方法

      // 初始化数据库信息
      devOpenHelper = new MyOpenHelper(MyApp.getContext(), DATABASE_NAME, null);
      //mDaoMaster = new DaoMaster(devOpenHelper.getWritableDatabase());
      //数据库加密
      mDaoMaster = new DaoMaster(getWritableDatabase());

    到此,对数据的加密工作基本完成,不管是直接加密还是对已有数据库进行加密都没有问题。

    展开全文
  • 首先数据库加密有两种方式: 1.对数据库内容进行加密,比如利用md5等进行加密,但是这样相对来说不是很方便。 2.直接对数据库文件进行加密,有收费也有免费的,下面主要是采用SQLCipher进行数据库文件加密。 如何...

    SQLCipher实现数据库文件加密代码:

    http://download.csdn.net/download/c657674129/10109019

    首先数据库加密有两种方式:

    1.对数据库内容进行加密,比如利用md5等进行加密,但是这样相对来说不是很方便。

    2.直接对数据库文件进行加密,有收费也有免费的,下面主要是采用SQLCipher进行数据库文件加密。


    如何使用SQLCipher进行加密,请参考下面的链接

      1.相应的jar包 so文件 和zip文件的导入

       参考:        http://blog.csdn.net/ccm_oliver/article/details/46346127    里面的实践部分,按照相应的步骤进行操作,把.zip  .so  .jar 放在相应的文件目录下就可以。

    2. 导入成功后,进行SQLCipher的实现

       参考:        http://www.cnblogs.com/whoislcj/p/5511522.html   

    3.最后就是运行测试了,但是有时候还是会报错,java.lang.UnsatisfiedLinkError 这个可能是由于两个原因,

    第一个原因可能忘记调用

    SQLiteDatabase.loadLibs(this);//涉及到数据库必须使用而且需要先声明才能执行以下实例化的数据库
    

    第二个原因如果你使用的是Eclipse的话,按照上面的导入.jar .so .zip放在相应的位置是可以的,但是如果使用的是AndroidStudio的话,so文件放位置就要做一下改变。

    参考:   http://www.cnblogs.com/woider/p/5325725.html   这里面有很详细的讲解说明。


    展开全文
  • springboot项目就不多说了。druid也不多说了,网上一搜就...druid提供了数据库密码加密处理。如何使用:1,引入依赖: <dependency> <groupId>com.alibaba</groupId>...

    springboot项目就不多说了。druid也不多说了,网上一搜就有介绍。

    我理解简单说:

    druid替换了spring boot的c3p0和DBCP连接池。

    druid提供了可视化界面进行sql性能等相关统计。

    druid提供了数据库密码加密处理。

    如何使用:

    1,引入依赖:

    		<dependency>
    			<groupId>com.alibaba</groupId>
    			<artifactId>druid</artifactId>
    			<version>1.1.5</version>
    		</dependency>


    2,配置文件配置:

    ######################################################
    ###Mysql及数据连接池配置,使用druid替换原有连接池
    ######################################################
    #druid驱动配置
    spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
    #数据库链接,myql5.7之后需要SSL加密链接 这里配置编码及打开SSL
    spring.datasource.url = jdbc:mysql://127.0.0.1:3306/mydb?characterEncoding=utf8&useSSL=true
    #数据库用户名
    spring.datasource.username = root
    #使用druid加密数据库密码
    spring.datasource.password = 加密后的pwd
    #使用druid加密数据库的公钥
    spring.datasource.publicKey=公钥
    #Mysql数据库驱动
    spring.datasource.driverClassName = com.mysql.jdbc.Driver
    #连接池配置信息,初始化连接数
    spring.datasource.initialSize=5
    #连接池配置信息,最小连接数
    spring.datasource.minIdle=5
    #连接池配置信息,最大连接数
    spring.datasource.maxActive=20
    # 配置获取连接等待超时的时间
    spring.datasource.maxWait=60000
    # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
    spring.datasource.timeBetweenEvictionRunsMillis=60000
    # 配置一个连接在池中最小生存的时间,单位是毫秒
    spring.datasource.minEvictableIdleTimeMillis=300000
    #验证数据库是否链接
    spring.datasource.validationQuery=SELECT 1 FROM DUAL
    #当链接空闲时,是否测试链接可用性
    spring.datasource.testWhileIdle=true
    #当从连接池拿到连接时,是否测试连接的可用性
    spring.datasource.testOnBorrow=false
    #当链接归还连接池时,是否测试链接可用性
    spring.datasource.testOnReturn=false
    # 控制PSCache(内存占用优化,大幅度提升sql执行性能,支持oracle,db2,sql server,不支持mysql)
    spring.datasource.poolPreparedStatements=false
    #指定每个连接上PSCache的大小 
    #spring.datasource.maxPoolPreparedStatementPerConnectionSize=20  
    # 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙
    spring.datasource.filters=config,stat,wall,log4j
    # 通过connectProperties属性来打开mergeSql功能;慢SQL记录
    spring.datasource.connectionProperties=druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000;config.decrpt=true;
    spring.datasource.logSlowSql=true

    3,配置druid配置类

    package com.wm.springboot.conf;
    
    import com.alibaba.druid.filter.config.ConfigTools;
    import com.alibaba.druid.pool.DruidDataSource;
    import com.alibaba.druid.support.http.StatViewServlet;
    import com.alibaba.druid.support.http.WebStatFilter;
    
    import lombok.extern.slf4j.Slf4j;
    
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.boot.web.servlet.FilterRegistrationBean;
    import org.springframework.boot.web.servlet.ServletRegistrationBean;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    
    import javax.sql.DataSource;
    import java.sql.SQLException;
    
    /**
     * Druid配置类
     * 1、可以监控数据库访问性能,内置了插件:StatFilter,能够详细统计SQL执行性能,用于线上分析数据库访问性能。
     * 2、替换DBCP、C3P0数据库连接池,提供了一个高效稳定的扩展性能好的数据库连接池DruidDataSource。
     * 3、数据库加密,DruidDriuiver和DruidDataSource都支持PasswordCallback。
     * 4、SQL执行日志。
     * 5、扩展JDBC,如果你要对JDBC层有编程的需求,可以通过Druid提供的Filter-Chain机制,很方便编写JDBC层的扩展插件
     * Druid是一个阿里开源的数据库连接池框架,有可视化界面。
     * http://localhost:8080/druid/login.html
     * 可以查看sql访问速度等等很多信息,感觉还是比较有用的。集成进来试试
     * @author maybe
     */
    @Configuration
    @Slf4j
    public class DruidConfig {
    
    	//使用@value注入配置文件中信息
        @Value("${spring.datasource.url}")
        private String dbUrl;
    
        @Value("${spring.datasource.username}")
        private String username;
    
        @Value("${spring.datasource.password}")
        private String password;
        
        @Value("${spring.datasource.publicKey}")
        private String publicKey;
    
        @Value("${spring.datasource.driverClassName}")
        private String driverClassName;
    
        @Value("${spring.datasource.initialSize}")
        private int initialSize;
    
        @Value("${spring.datasource.minIdle}")
        private int minIdle;
    
        @Value("${spring.datasource.maxActive}")
        private int maxActive;
    
        @Value("${spring.datasource.maxWait}")
        private int maxWait;
    
        @Value("${spring.datasource.timeBetweenEvictionRunsMillis}")
        private int timeBetweenEvictionRunsMillis;
    
        @Value("${spring.datasource.minEvictableIdleTimeMillis}")
        private int minEvictableIdleTimeMillis;
    
        @Value("${spring.datasource.validationQuery}")
        private String validationQuery;
    
        @Value("${spring.datasource.testWhileIdle}")
        private boolean testWhileIdle;
    
        @Value("${spring.datasource.testOnBorrow}")
        private boolean testOnBorrow;
    
        @Value("${spring.datasource.testOnReturn}")
        private boolean testOnReturn;
    
        @Value("${spring.datasource.filters}")
        private String filters;
    
        @Value("${spring.datasource.logSlowSql}")
        private String logSlowSql;
        
        @Value("${spring.datasource.connectionProperties}")
        private String connectionProperties;
    
        @Bean
        public ServletRegistrationBean druidServlet() throws Exception {
            ServletRegistrationBean reg = new ServletRegistrationBean();
            reg.setServlet(new StatViewServlet());
            reg.addUrlMappings("/druid/*");//配置访问URL
            reg.addInitParameter("loginUsername", username);  //配置用户名,这里使用数据库账号。
            reg.addInitParameter("loginPassword", ConfigTools.decrypt(publicKey,password));  //配置用户名,这里使用数据库密码
            reg.addInitParameter("logSlowSql", logSlowSql);   //是否启用慢sql
            return reg;
        }
    
        @Bean
        public FilterRegistrationBean filterRegistrationBean() {
            FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean();
            filterRegistrationBean.setFilter(new WebStatFilter());
            filterRegistrationBean.addUrlPatterns("/*");
            filterRegistrationBean.addInitParameter("exclusions", "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*");  //配置那些资源不被拦截
            filterRegistrationBean.addInitParameter("profileEnable", "true");
            return filterRegistrationBean;
        }
    
        /**
         * 这个应该是数据库连接池配置
         * @return
         * @throws Exception 
         */
        @Bean
        public DataSource druidDataSource() throws Exception {
            DruidDataSource datasource = new DruidDataSource();
            datasource.setUrl(dbUrl);
            datasource.setUsername(username);
            datasource.setPassword(ConfigTools.decrypt(publicKey,password));
            datasource.setDriverClassName(driverClassName);
            datasource.setInitialSize(initialSize);
            datasource.setMinIdle(minIdle);
            datasource.setMaxActive(maxActive);
            datasource.setMaxWait(maxWait);
            datasource.setTimeBetweenEvictionRunsMillis(timeBetweenEvictionRunsMillis);
            datasource.setMinEvictableIdleTimeMillis(minEvictableIdleTimeMillis);
            datasource.setValidationQuery(validationQuery);
            datasource.setTestWhileIdle(testWhileIdle);
            datasource.setTestOnBorrow(testOnBorrow);
            datasource.setTestOnReturn(testOnReturn);
            datasource.setConnectionProperties(connectionProperties);
            try {
                datasource.setFilters(filters);
            } catch (SQLException e) {
                log.error("druid configuration initialization filter:{}",e);
            }
            return datasource;
        }
    
    }

    一定要注意:这里密码是使用@value注解从配置文件中取出来的。这时候你已经在配置文件中使用了加密后的pwd串,所以在java中配置druid时,要讲publickey和pwd都写入使用解密方法

    ConfigTools.decrypt(publicKey,password)
    去进行解密才可以使用。

    那么现在spring boot集成druid已经完成了。只差将密码加密并且写入配置文件即可。

    druid进行数据库密码加密:

    1,找到druid的相关jar包

    这里我是用的是

    2,进行加密

    进行cmd找到该jar包所在目录,执行:

    java -cp druid-1.1.5.jar com.alibaba.druid.filter.config.ConfigTools password

    得到:

        1,privateKey  私钥,进行加密时的key

        2,publickey  公钥,进行解密时的key

        3,password  加密后的密码 

    将password和publickey填入配置文件中即可完成。



    展开全文
  • 数据库加密

    2018-10-25 10:58:49
    让大家详细了解数据库加密系统的好处,和数据库加密的应用
  • labview数据库加密

    2011-08-03 15:31:39
    labview数据库加密labview数据库加密labview数据库加密labview数据库加密labview数据库加密labview数据库加密
  • ACCESS数据库加密

    2011-02-28 08:58:55
    ACCESS数据库加密ACCESS数据库加密ACCESS数据库加密ACCESS数据库加密ACCESS数据库加密ACCESS数据库加密
  • Sqlite数据库加密加密

    千次阅读 2019-05-10 15:06:38
    Sqlite数据库加密。(C#连接加密的Sqlite数据库的方法) 参考地址[1]: https://www.jb51.net/article/120279.htm sqlite破解安装包下载: https://download.csdn.net/download/yinchoushi8780/11170781 一、数据库...

    Sqlite数据库加密。(C#连接加密的Sqlite数据库的方法)

    参考地址[1]: https://www.jb51.net/article/120279.htm
    sqlite破解安装包下载: https://download.csdn.net/download/yinchoushi8780/11170781

    一、数据库加密

    对数据加密分两种,一种是对数据库本身进行加密,另一种是对数据表中的数据进行加密,
    如果SQLite数据库加密,我这里使用的一个管理工具叫SQLiteDeveloper,如下就可以加密数据库。
    在这里插入图片描述
    如果在工具中不提供密码的情况下打开数据库,会给你错误提示如下:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    二、C#代码连接数据库

    或者在C# 使用错误的密码也会给你错误提示:
    System.Data.SQLite.SQLiteException:“file is encrypted or is not a database
    在这里插入图片描述
    正确的连接方式就是在连接字符串中提供正确的密码:

    using System;
    using System.Collections.Generic;
    using System.Data.SQLite;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    namespace OpenSqliteDBByPwd
    {
      class Program
      {
        static void Main(string[] args)
        {
          string DB_PATH = "Data Source=EncryptedDB.db3; Password=1111";
          using (SQLiteConnection con = new SQLiteConnection(DB_PATH))
          {
            con.Open();
            string sqlStr = @"INSERT INTO Customer(CUST_NO,CUSTOMER)
                     VALUES
                     (
                       3001,
                       'Allen'
                     )";
            using (SQLiteCommand cmd = new SQLiteCommand(sqlStr, con))
            {
              cmd.ExecuteNonQuery();
            }
          }
        }
      }
    }
    

    参考地址[1]: https://www.jb51.net/article/120279.htm
    sqlite破解安装包下载: https://download.csdn.net/download/yinchoushi8780/11170781

    展开全文
  • 多层数据库加密 完整源代码 cb c++ 数据库加密技术
  • ormlite框架整合sqlcipher数据库加密实例,注意调配编译版本
  • Android 数据库加密

    2013-09-10 09:29:05
    sqlite-encrypt Android 数据库加密
  • access数据库加密+c#,程序中数据库加密,防被盗用数据
  • 介绍了数据库机密模型的概念以及相对传统数据库保护模型的优点,讲解了一些数据库加密模型的技术,最后提出了数据库加密模型的不足。
  • android 数据库加密

    2013-05-20 17:24:43
    这是一个基于对android sqlite 数据库加密的案例,实现了整体的数据库加解密。
  • mfc数据库加密

    2015-09-29 21:17:54
    利用mfc制作界面,对数据库进行加密,再提取出想要的数据,可供学习
  • 实现数据库信息加密,实现数据库信息加密,实现数据库信息加密,实现数据库信息加密,实现数据库信息加密
  • SqlCipher数据库加密工具,快速加密sqllite。。。。。。。。。。。。。。
  • 在分析数据库加密关键技术的基础上,由于在数据库加密时难以采用直接分发密钥给用户的方式,所以提出一种将密钥管理与智能卡和指纹识别技术相结合的方法,对于提高关系数据库安全具有一定作用。
  • 数据库加密设计.pdf

    2021-10-11 01:00:41
    数据库加密设计.pdf
  • 数据库加密技术.pdf

    2021-10-11 01:00:35
    数据库加密技术.pdf
  • 所以研究了下SQLite3本地数据库加密的方法,百度之,有两种,一是加密数据后存入数据库,二是整个加密数据库; 如果选一改地方实在太多,所以一直找直接加密sqlite数据库的方法; 然后各种搜索,整合后可行的方式是...
  • 手机数据库加密sqlite

    2017-12-18 23:00:17
    手机数据库加密sqlite,可用于手机数据库加密,也可用于自己调试
  • Android数据库加密

    千次阅读 2019-09-11 18:28:39
    Android数据库加密 一、简介 SQLite是一个轻量的、跨平台的、开源的数据库引擎,它的读写效率、资源消耗总量、延迟时间和整体简单性上具有的优越性,使其成为移动平台数据库的最佳解决方案(如Android、iOS)。Android...
  • 数据库加密/解密

    2013-05-13 12:44:58
    数据库加密/解密 对数据库、表、字段 需要的进行加密,也可以解密!
  • SQL数据库加密

    2012-06-25 12:50:07
    采用的是SQL Server的透明数据库加密方式,算法采用AES-128,就算你的数据库文件被窃取,别人依然无法打开你的文件,查看你的数据!具有高安全性!
  • Sqlcipher数据库加密工具,可以吧需要的sqllite相关文件进行加密
  • 用于网站连接SQL数据库加密验证,

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 313,724
精华内容 125,489
关键字:

怎么进行数据库加密