나는 단지 SQLite를 사용하는 법을 배우고 있는데 가능하다면 궁금합니다.
-
데이터베이스 파일의 암호화?
-
데이터베이스 열기를 비밀번호로 보호 하시겠습니까?
추신. 이 “SEE (SQLite Encryption Extension)”가 있다는 것을 알고 있지만 설명서에 따르면 “SEE는 라이센스가있는 소프트웨어입니다 …”및 “SEE의 영구적 인 소스 코드 라이센스 비용은 US $ 2000입니다.”
답변
SQLite에는 정규 배포에 사용되지 않는 암호화 용 후크가 내장되어 있지만 다음과 같은 몇 가지 구현이 있습니다.
- 참조 -공식 구현.
- wxSQLite -SQLite의 암호화도 구현하는 wxWidgets 스타일 C ++ 래퍼입니다.
- SQLCipher -openSSL의 libcrypto를 사용하여 구현합니다.
- SQLiteCrypt- 사용자 정의 구현, 수정 된 API.
- botansqlite3 -botansqlite3은 암호화를 위해 Botan의 모든 알고리즘을 사용할 수있는 SQLite3 용 암호화 코덱입니다.
- sqleet -ChaCha20 / Poly1305 프리미티브를 사용하는 또 다른 암호화 구현. 위에서 언급 한 wxSQLite는이를 암호화 공급자로 사용할 수 있습니다.
SEE 및 SQLiteCrypt는 라이센스 구매가 필요합니다.
공개 : 나는 botansqlite3을 만들었습니다.
답변
SQLite3 DB를 비밀번호로 보호 할 수 있습니다. 작업을 수행하기 전에 처음으로 다음과 같이 비밀번호를 설정하십시오.
SQLiteConnection conn = new SQLiteConnection("Data Source=MyDatabase.sqlite;Version=3;");
conn.SetPassword("password");
conn.open();
다음에 다음과 같이 액세스 할 수 있습니다.
conn = new SQLiteConnection("Data Source=MyDatabase.sqlite;Version=3;Password=password;");
conn.Open();
GUI 편집기에서 데이터를 볼 수 없습니다. 나중에 비밀번호를 변경하려면conn.ChangePassword("new_password");
하려면 다음을 하십시오. 비밀번호를 재설정하거나 제거하려면conn.ChangePassword(String.Empty);
답변
.net 라이브러리 System.Data.SQLite 도 암호화를 제공합니다.
답변
http://system.data.sqlite.org/sqlite3.dll
에서 암호화 지원 파일을 얻을 수 있습니다 .
1- http ://system.data.sqlite.org/index.html/doc/trunk/www/downloads.wiki로 이동 하십시오 하여 패키지 중 하나를 다운로드하십시오. .NET 버전은 여기와 관련이 없습니다.
2- SQLite.Interop.dll
패키지에서 추출 하여 이름을 바꿉니다.sqlite3.dll
. 이 DLL은 일반 텍스트 비밀번호 또는 암호화 키를 통한 암호화를 지원합니다.
언급 된 파일은 기본 파일이며 .NET 프레임 워크가 필요 하지 않습니다 . 다운로드 한 패키지에 따라 Visual C ++ 런타임이 필요할 수 있습니다.
최신 정보
이것은 32 비트 개발을 위해 다운로드 한 패키지입니다 : http://system.data.sqlite.org/blobs/1.0.94.0/sqlite-netFx40-static-binary-Win32-2010-1.0.94.0.zip
답변
다음은 적절한 보안 솔루션을 대체하기위한 것이 아닙니다.
4 일 동안이 문제를 해결 한 후에 NuGet의 오픈 소스 System.Data.SQLite 패키지 만 사용하여 솔루션을 구성했습니다. 이것이 얼마나 많은 보호를 제공하는지 모르겠습니다. 나는 내 자신의 학습 과정에만 사용하고 있습니다. 그러면 DB가 생성되고 암호화되어 테이블이 생성되며 데이터가 추가됩니다.
using System.Data.SQLite;
namespace EncryptDB
{
class Program
{
static void Main(string[] args)
{
string connectionString = @"C:\Programming\sqlite3\db.db";
string passwordString = "password";
byte[] passwordBytes = GetBytes(passwordString);
SQLiteConnection.CreateFile(connectionString);
SQLiteConnection conn = new SQLiteConnection("Data Source=" + connectionString + ";Version=3;");
conn.SetPassword(passwordBytes);
conn.Open();
SQLiteCommand sqlCmd = new SQLiteCommand("CREATE TABLE data(filename TEXT, filepath TEXT, filelength INTEGER, directory TEXT)", conn);
sqlCmd.ExecuteNonQuery();
sqlCmd = new SQLiteCommand("INSERT INTO data VALUES('name', 'path', 200, 'dir')", conn);
sqlCmd.ExecuteNonQuery();
conn.Close();
}
static byte[] GetBytes(string str)
{
byte[] bytes = new byte[str.Length * sizeof(char)];
bytes = System.Text.Encoding.Default.GetBytes(str);
return bytes;
}
}
}
선택적으로을 제거 하고 다음에 배치해야하는 conn.SetPassword(passwordBytes);
것으로 교체 할 수 있습니다.conn.ChangePassword("password");
conn.Open();
이전 대신에 . 그러면 GetBytes 메서드가 필요하지 않습니다.
암호를 해독하려면 열기 전에 연결 문자열에 암호를 입력하면됩니다.
string filename = @"C:\Programming\sqlite3\db.db";
string passwordString = "password";
SQLiteConnection conn = new SQLiteConnection("Data Source=" + filename + ";Version=3;Password=" + passwordString + ";");
conn.Open();
답변
항상 클라이언트 측에서 데이터를 암호화 할 수 있습니다. 성능 문제가 있기 때문에 모든 데이터를 암호화 할 필요는 없습니다.
답변
글쎄, SEE
비싸다. 그러나 SQLite
암호화를위한 인터페이스가 내장되어 있습니다 (Pager). 즉, 기존 코드 위에 쉽게 암호화 메커니즘을 개발할 수 있으므로 반드시 그럴 필요는 없습니다 AES
. 정말요 내 게시물을 참조하십시오 : https : //.com/a/49161716/9418360
호출기 암호화를 사용하려면 SQLITE_HAS_CODEC = 1을 정의해야합니다. 아래 샘플 코드 (원본 SQLite
소스) :
#ifdef SQLITE_HAS_CODEC
/*
** This function is called by the wal module when writing page content
** into the log file.
**
** This function returns a pointer to a buffer containing the encrypted
** page content. If a malloc fails, this function may return NULL.
*/
SQLITE_PRIVATE void *sqlite3PagerCodec(PgHdr *pPg){
void *aData = 0;
CODEC2(pPg->pPager, pPg->pData, pPg->pgno, 6, return 0, aData);
return aData;
}
#endif
거기에 상용 버전 C language
에 대한 SQLite
그것은 또한 작업 할 수 있습니다 – 암호화 AES256을 사용은 PHP
하지만 컴파일해야 PHP
및 SQLite
확장. SQLite
데이터베이스 파일을 즉시 해독 / 암호화 하고 파일 내용은 항상 암호화됩니다. 굉장히 유용하다.