sqlite3-Android-加密解密应用数据库

问题描述

Android-加密解密应用数据库

怎么样确保数据库文件使用加密算法后不会被修改。

我用了硬编码关键字再反编译,但是还是可以访问。如果root设备用户就能随便阅读了。

怎么能让用户无法访问和阅读我的数据库。谢谢。

解决方案

package com.kushal.utils;

    import java.security.spec.KeySpec;
    import javax.crypto.Cipher;
    import javax.crypto.SecretKey;
    import javax.crypto.SecretKeyFactory;
    import javax.crypto.spec.DESedeKeySpec;
    import sun.misc.BASE64Decoder;
    import sun.misc.BASE64Encoder;

    public class DESedeEncryption {

        private static final String UNICODE_FORMAT = "UTF8";
        public static final String DESEDE_ENCRYPTION_SCHEME = "DESede";
        private KeySpec myKeySpec;
        private SecretKeyFactory mySecretKeyFactory;
        private Cipher cipher;
        byte[] keyAsBytes;
        private String myEncryptionKey;
        private String myEncryptionScheme;
        SecretKey key;

        public DESedeEncryption() throws Exception
        {
            myEncryptionKey = "ThisIsSecretEncryptionKey";
            myEncryptionScheme = DESEDE_ENCRYPTION_SCHEME;
            keyAsBytes = myEncryptionKey.getBytes(UNICODE_FORMAT);
            myKeySpec = new DESedeKeySpec(keyAsBytes);
            mySecretKeyFactory = SecretKeyFactory.getInstance(myEncryptionScheme);
            cipher = Cipher.getInstance(myEncryptionScheme);
            key = mySecretKeyFactory.generateSecret(myKeySpec);
        }

        /**
         * Method To Encrypt The String
         */
        public String encrypt(String unencryptedString) {
            String encryptedString = null;
            try {
                cipher.init(Cipher.ENCRYPT_MODE, key);
                byte[] plainText = unencryptedString.getBytes(UNICODE_FORMAT);
                byte[] encryptedText = cipher.doFinal(plainText);
                BASE64Encoder base64encoder = new BASE64Encoder();
                encryptedString = base64encoder.encode(encryptedText);
            } catch (Exception e) {
                e.printStackTrace();
            }
            return encryptedString;
        }
        /**
         * Method To Decrypt An Ecrypted String
         */
        public String decrypt(String encryptedString) {
            String decryptedText=null;
            try {
                cipher.init(Cipher.DECRYPT_MODE, key);
                BASE64Decoder base64decoder = new BASE64Decoder();
                byte[] encryptedText = base64decoder.decodeBuffer(encryptedString);
                byte[] plainText = cipher.doFinal(encryptedText);
                decryptedText= bytes2String(plainText);
            } catch (Exception e) {
                e.printStackTrace();
            }
            return decryptedText;
        }
        /**
         * Returns String From An Array Of Bytes
         */
        private static String bytes2String(byte[] bytes) {
            StringBuffer stringBuffer = new StringBuffer();
            for (int i = 0; i < bytes.length; i++) {
                stringBuffer.append((char) bytes[i]);
            }
            return stringBuffer.toString();
        }

        /**
         * Testing The DESede Encryption And Decryption Technique
         */
        public static void main(String args []) throws Exception
        {
            DESedeEncryption myEncryptor= new DESedeEncryption();
            String stringToEncrypt="Sanjaal.com";
            String encrypted=myEncryptor.encrypt(stringToEncrypt);
            String decrypted=myEncryptor.decrypt(encrypted);
            System.out.println("String To Encrypt: "+stringToEncrypt);
            System.out.println("Encrypted Value :" + encrypted);
            System.out.println("Decrypted Value :"+decrypted);
        }
    }
output:
String To Encrypt: Sanjaal.com
Encrypted Value :aArhqI25Y1SkYrdv9gxYDQ==
Decrypted Value :Sanjaal.com

http://sanjaal.com/java/189/java-encryption/tutorial-encryption-and-decryption-using-desede-triple-des-in-java/
时间: 2025-01-30 11:52:27

sqlite3-Android-加密解密应用数据库的相关文章

Android 加密解密字符串详解_Android

加密和解密的字符串: 复制代码 代码如下: package eoe.demo; import java.security.SecureRandom; import javax.crypto.Cipher; import javax.crypto.KeyGenerator; import javax.crypto.SecretKey; import javax.crypto.spec.SecretKeySpec; /** * Usage: * <pre> * String crypto = Si

Android 加密解密字符串详解

加密和解密的字符串: 复制代码 代码如下: package eoe.demo; import java.security.SecureRandom; import javax.crypto.Cipher; import javax.crypto.KeyGenerator; import javax.crypto.SecretKey; import javax.crypto.spec.SecretKeySpec; /** * Usage: * <pre> * String crypto = Si

数据库连接字符串的处理方法!加密解密连接字符串

加密|解密|数据|数据库|数据库连接|字符串 数据库连接字符串的处理应该是一个项目里最基础的东东了.(除非你的项目不涉及到数据库.) 千万不要小看他,处理不好也时会给你带来不少的麻烦的. 连接字符串的内容在这里就不讨论了,这里主要说一下他的存放位置和读取方法. 我们要达到的目的:无论连接字符串如何变化,都不需要修改项目! 1.把连接字符串写在程序里面. 一般的初级教程里会告诉你这么写 VB.net Dim cn As New SqlClient.SqlConnection("user id=sa

Java加密解密工具(适用于JavaSE/JavaEE/Android)_java

本文实例为大家分享了一个适用于JavaSE/JavaEE/Android的Java加密解密工具,供大家学习,具体内容如下 package longshu.utils.security; import java.lang.reflect.Method; import java.security.InvalidKeyException; import java.security.Key; import java.security.MessageDigest; import java.security

android sqlite 加密-android sqlcipher 对现有数据库的加密

问题描述 android sqlcipher 对现有数据库的加密 最近看了android sqlite 加密 sqlitecipher .sqlitecipher对新建的数据库加密,没有看到对现有数据库的加密,请问怎么修改数据库密码和对现有数据库的加密? 解决方案 http://blog.csdn.net/zhanghw0917/article/details/39051055

Android RSA加密解密

转载请注明出处: http://blog.csdn.net/bbld_/article/details/38777491 概述 RSA是目前最有影响力的公钥加密算法,该算法基于一个十分简单的数论事实:将两个大素数相乘十分容易,但那时想要对其乘积进行因式分解却极其困 难,因此可以将乘积公开作为加密密钥,即公钥,而两个大素数组合成私钥.公钥是可发布的供任何人使用,私钥则为自己所有,供解密之用.关于RSA其它需要了解的知识,参考维基百科:http://zh.wikipedia.org/zh-cn/RS

android客户端和js服务端RSA加密解密

问题描述 android客户端和js服务端RSA加密解密 android客户端利用js服务端的公钥加密数据再发给js服务端解密,可是js客户端总返回给我解密失败,找不到问题在哪,求大神指教!!!

Android文件加密:加密解密出来文件打开有误。

问题描述 Android文件加密:加密解密出来文件打开有误. 使用CipherInputStream,CipherOutputStream对文件进行加密解密,对于jpg,tex,pdf文档都可以正常显示,但是对png,apk文件解密出来的文件打开不了,png提示没有缩略图,apk提示解析压缩包有误.所有加密解密文件大小基本没大的变化. 解决方案 如何加密解密文件Android AES 文件加密解密Android AES 文件加密解密 解决方案二: 直接比较加解密前后文件的md5等,看是否完全一致

Android、iOS和Java通用的AES128加密解密示例代码_java

前言 移动端越来越火了,我们在开发过程中,总会碰到要和移动端打交道的场景,比如android和iOS的打交道.为了让数据交互更安全,我们需要对数据进行加密传输. 这篇文章给大家分享AES的加密和解密.Android和ios通用的AES加密算法.大家可以直接集成到自己的项目.服务器接口如果是用Java写的话.整个框架都完美了.如果是.NET编写的后台接口的话.得改造一下哦 IOS加密 /*加密方法*/ (NSString *)AES256EncryptWithPlainText:(NSString

C#/IOS/Android通用加密解密方法

原文:C#/IOS/Android通用加密解密方法 公司在做移动端ios/android,服务器提供接口使用的.net,用到加密解密这一块,也在网上找了一些方法,有些是.net加密了android解密不了,或者反之.下面的是三个平台都可以加密解密的方法.加密解密中用到的key="1234578";在调取方法时传值即可. C#代码 #region 跨平台加解密(c#) /// <summary> /// 对字符串进行DES加密 /// </summary> ///