我的应用程序中有一个现有的sqlite数据库.它运行成功.现在我需要使用sqlcipher加密数据库.我的问题是在将sqlite转换为加密时我得到了以下异常.
net.sqlcipher.database.SQLiteException: table android_metadata already exists
at net.sqlcipher.database.SQLiteDatabase.native_rawExecSQL(Native Method)
at net.sqlcipher.database.SQLiteDatabase.rawExecSQL(SQLiteDatabase.java:1851)
at com.x.y.convert_sqlite_to_sqlcipher(Practitioner_menu.java:2626)
at com.x.y$AdminProcess.doInBackground(Practitioner_menu.java:1659)
at com.x.y$AdminProcess.doInBackground(Practitioner_menu.java:1)
at android.os.AsyncTask$2.call(AsyncTask.java:287)
at java.util.concurrent.FutureTask.run(FutureTask.java:234)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
at java.lang.Thread.run(Thread.java:856)
Run Code Online (Sandbox Code Playgroud)
我的转换代码:
File old_sqliteFile = getDatabasePath("old_db.sqlite");
File databaseFile = getDatabasePath("new_db.db");
databaseFile.mkdirs();
databaseFile.delete();
database = SQLiteDatabase.openOrCreateDatabase(databaseFile,
"password", null);
database.rawExecSQL(String.format(
"ATTACH DATABASE '%s' AS encrypted KEY '%s'",
databaseFile.getAbsolutePath(), "password");
database.rawExecSQL("select sqlcipher_export('encrypted')");
database.rawExecSQL("DETACH DATABASE encrypted");
database.close();
Run Code Online (Sandbox Code Playgroud)
请有人帮我弄清楚我做错了什么?
当我在MacOS 64bit上编译SQLCIPHER时
./configure --enable-tempstore=yes CFLAGS="-DSQLITE_HAS_CODEC -DSQLITE_TEMP_STORE=2" LDFLAGS="/Users/administrator/Documents/openssl/lib/libcrypto.a"
Run Code Online (Sandbox Code Playgroud)
我得到32位lib libsqlite3.a但我需要64位libsqlite3.a
我怎么能这样做?
我在配置 SQLCipher 时遇到问题:
在动态链接中
./configure --enable-tempstore=yes CFLAGS="-DSQLITE_HAS_CODEC" LDFLAGS="-lcrypto"
我收到此错误:检查 C 编译器是否工作...否
,在静态链接中
./configure --enable-tempstore=yes CFLAGS="-DSQLITE_HAS_CODEC" LDFLAGS="/usr/local/openssl/lib/libcrypto.a"
此错误:配置:错误:未找到库加密。安装 openssl!”
对于静态方法,我构建了最新版本的 openssl
怎么了?
目前我正在开发一个Android应用程序,它存储用户的重要数据,例如密码,卡号,网站用户名和密码等。我决定使用SQLITE DB,以便用户的数据可以驻留在他们自己的手机中,并且我计划实施 AES-256 算法 (SQLCiper),以便使用密钥对数据进行加密。但我担心的是它能发挥多大作用,如果有人进行逆向工程或 root 会发生什么?
请帮助我弄清楚这一点。
提前致谢。
我之前已经问过这个问题并且没有得到任何适当的答案.
我在Play商店发布了一个应用程序,它大量使用SQLite数据库.
现在我需要使用SQLCipher来保护数据库.这是我面临的一些问题.
1)如何将SQLCipher与我现有的未加密数据库无缝集成,以便我的应用程序正常工作但现在数据库已加密?
(我想要一个简短的教程)
2)我应该如何检查数据库是否未加密,然后如何加密?我应该只做一次吗?什么应该是最好的做法?
(可能的副本不回答这个)
3)当我加密现有的未加密数据库时,SQLCipher是否创建了一个新数据库?如果是的话,我应该如何管理这个新的?那个未加密的旧数据库怎么样?它还留在那里吗?
(重复问题中也没有提供此解释)
我一直在尝试使用以下命令在 MacOS 上构建 sqlcipher3:
git clone https://github.com/coleifer/sqlcipher3 && cd sqlcipher3
python3 setup.py build
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
$ python3 setup.py build
running build
running build_py
creating build
creating build/lib.macosx-10.14-x86_64-3.7
creating build/lib.macosx-10.14-x86_64-3.7/sqlcipher3
copying sqlcipher3/__init__.py -> build/lib.macosx-10.14-x86_64-3.7/sqlcipher3
copying sqlcipher3/dbapi2.py -> build/lib.macosx-10.14-x86_64-3.7/sqlcipher3
running build_ext
Builds a C extension linking against libsqlcipher library
building 'sqlcipher3._sqlite3' extension
creating build/temp.macosx-10.14-x86_64-3.7
creating build/temp.macosx-10.14-x86_64-3.7/src
xcrun -sdk macosx clang -arch x86_64 -DNDEBUG -g -fwrapv -O3 -Wall -Qunused-arguments -DMODULE_NAME="sqlcipher3.dbapi2" -I/usr/include -I/Users/gab/Downloads/testbuild/venv/include -I/Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.7/include/python3.7m -c src/module.c -o build/temp.macosx-10.14-x86_64-3.7/src/module.o
In file included from src/module.c:24:
src/connection.h:34:10: fatal …Run Code Online (Sandbox Code Playgroud) 我将 mirth 安装在一个 Ec2 Linux 实例中,而我的 mysql 则放置在另一个 Ec2 实例中。在 mirth.properties 中,我已经为 mysql 创建了配置 url。
当服务启动时,它会自动停止,并在日志中记录此错误消息
The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:61)
at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:105)
at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:151)
at com.mysql.cj.exceptions.ExceptionFactory.createCommunicationsException(ExceptionFactory.java:167)
at com.mysql.cj.protocol.a.NativeProtocol.negotiateSSLConnection(NativeProtocol.java:361)
at com.mysql.cj.protocol.a.NativeAuthenticationProvider.negotiateSSLConnection(NativeAuthenticationProvider.java:777)
at com.mysql.cj.protocol.a.NativeAuthenticationProvider.proceedHandshakeWithPluggableAuthentication(NativeAuthenticationProvider.java:486)
at com.mysql.cj.protocol.a.NativeAuthenticationProvider.connect(NativeAuthenticationProvider.java:202)
at com.mysql.cj.protocol.a.NativeProtocol.connect(NativeProtocol.java:1452)
at com.mysql.cj.NativeSession.connect(NativeSession.java:165)
at com.mysql.cj.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:955)
at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:825)
... 37 more
Caused by: javax.net.ssl.SSLHandshakeException: No appropriate protocol …Run Code Online (Sandbox Code Playgroud) 我正在使用greendao + sqlcipher并helper.getEncryptedWritableDb("sdfbdfsjkdjkf");
使用proguard 创建加密数据库并添加了规则
### greenDAO 3
-keepclassmembers class * extends org.greenrobot.greendao.AbstractDao {
public static java.lang.String TABLENAME;
}
-keep class **$Properties
# If you do not use SQLCipher:
-dontwarn org.greenrobot.greendao.database.**
# If you do not use RxJava:
-dontwarn rx.**
### greenDAO 2
-keepclassmembers class * extends de.greenrobot.dao.AbstractDao {
public static java.lang.String TABLENAME;
}
-keep class **$Properties
#######################################################################
-keep public class net.sqlcipher.** {
*;
}
-keep public class net.sqlcipher.database.** {
*;
}
Run Code Online (Sandbox Code Playgroud)
我将minifyEnabled设置为true的那一刻.我的应用程序在安装后启动时崩溃.
debug {
shrinkResources false
minifyEnabled false …Run Code Online (Sandbox Code Playgroud) java-native-interface android sqlcipher greendao android-proguard
sqlcipher ×8
android ×4
sqlite ×2
32bit-64bit ×1
amazon-ec2 ×1
build ×1
c ×1
configure ×1
encryption ×1
greendao ×1
homebrew ×1
linux ×1
macos ×1
mirth ×1
mysql ×1
openssl ×1
ubuntu-14.10 ×1