Estou apenas aprendendo a usar o SQLite e fiquei curioso para saber se isso é possível:
Criptografia do arquivo de banco de dados?
Proteger com senha a abertura do banco de dados?
PS. Eu sei que existe esta "Extensão de Criptografia SQLite (SEE).", Mas de acordo com a documentação "O SEE é um software licenciado ..." e "O custo de uma licença de código-fonte perpétua para o SEE é de US $ 2000".
Respostas:
O SQLite possui ganchos internos para criptografia que não são usados na distribuição normal, mas aqui estão algumas implementações que eu conheço:
O SEE e o SQLiteCrypt requerem a compra de uma licença.
Divulgação: criei o botansqlite3.
fonte
Você pode proteger com senha o SQLite3 DB. Pela primeira vez antes de executar qualquer operação, defina a senha da seguinte maneira.
da próxima vez você pode acessá-lo como
Isso não permitirá que nenhum editor de GUI visualize seus dados. Posteriormente, se desejar alterar a senha, use
conn.ChangePassword("new_password");
Para redefinir ou remover a senha, useconn.ChangePassword(String.Empty);
fonte
ChangePassword
usada? AES 128? RSA ..?SetPassword
método (no momento) parece basicamente inútil. A única maneira de conseguir que aSystem.Data.SQLite
biblioteca aplique corretamente a senha foi usando oChangePassword
método UsandoSetPassword
( antes de chamar oOpen
método, como aparentemente é exigido pela biblioteca), eu ainda conseguia abrir e editar o banco de dados no SQLiteStudio sem nenhuma senha. Não foi até eu usar oChangePassword
método ( depois de chamá-loOpen
) que o aplicativo de senha realmente "travou".A biblioteca .net System.Data.SQLite também fornece criptografia.
fonte
Você pode obter
sqlite3.dll
arquivos com suporte à criptografia em http://system.data.sqlite.org/ .1 - Acesse http://system.data.sqlite.org/index.html/doc/trunk/www/downloads.wiki e baixe um dos pacotes. A versão do .NET é irrelevante aqui.
2 - Extraia
SQLite.Interop.dll
do pacote e renomeie-o parasqlite3.dll
. Essa DLL oferece suporte à criptografia por meio de senhas de texto sem formatação ou chaves de criptografia.O arquivo mencionado é nativo e NÃO requer a estrutura .NET. Pode ser necessário o Visual C ++ Runtime, dependendo do pacote que você baixou.
ATUALIZAR
Este é o pacote que baixei para o desenvolvimento de 32 bits: http://system.data.sqlite.org/blobs/1.0.94.0/sqlite-netFx40-static-binary-Win32-2010-1.0.94.0.zip
fonte
.lib
que pudesse incorporar ao meu executável. Eu não poderia ter nenhuma DLL.lib
edll
.Lembre-se de que o seguinte não pretende substituir uma solução de segurança adequada.
Depois de brincar com isso por quatro dias, montei uma solução usando apenas o pacote System.Data.SQLite de código aberto do NuGet. Não sei quanta proteção isso fornece. Só o estou usando no meu curso de estudos. Isso criará o banco de dados, criptografará, criará uma tabela e incluirá dados.
Opcionalmente, você pode removê-
conn.SetPassword(passwordBytes);
lo e substituí-lo peloconn.ChangePassword("password");
qual precisa ser colocado depois econn.Open();
não antes. Então você não precisará do método GetBytes.Para descriptografar, é apenas uma questão de colocar a senha na cadeia de conexão antes da abertura da chamada.
fonte
"I think I saw 128 bit somewhere"
- esta é uma afirmação muito ruim se você planeja lidar com criptografia. A regra geral é que você nunca faz isso sozinho, se não o entende. Caso contrário, seria melhor não usá-lo.Você sempre pode criptografar dados no lado do cliente. Observe que nem todos os dados precisam ser criptografados porque há um problema de desempenho.
fonte
Bem,
SEE
é caro. No entanto,SQLite
possui interface integrada para criptografia (Pager). Isso significa que, além do código existente, é possível desenvolver facilmente algum mecanismo de criptografia, não precisa ser assimAES
. Qualquer coisa, mesmo. Por favor, veja o meu post aqui: https://stackoverflow.com/a/49161716/9418360Você precisa definir SQLITE_HAS_CODEC = 1 para ativar a criptografia do Pager. Código de exemplo abaixo (
SQLite
fonte original ):Existe uma versão comercial
C language
paraSQLite
criptografia usando o AES256 - ela também pode funcionarPHP
, mas precisa ser compiladaPHP
eSQLite
ampliada. De / criptografa oSQLite
arquivo do banco de dados em tempo real, o conteúdo do arquivo é sempre criptografado. Muito útil.http://www.iqx7.com/products/sqlite-encryption
fonte
Você pode usar as rotinas de criação de funções do SQLite ( manual PHP ):
Ao inserir dados, você pode usar a função de criptografia diretamente e INSERIR os dados criptografados ou pode usar a função personalizada e transmitir dados não criptografados:
Ao recuperar dados, você também pode usar a funcionalidade de pesquisa SQL:
fonte