Pergunta

Estou desenvolvendo um aplicativo que precisa armazenar segredos em um banco de dados.

Eu preciso de uma base de dados portátil (como Firebird, SQLite, etc) onde os dados serão armazenados criptografados ou protegidos por senha ou ambos ...

Vamos tomar como exemplo que eu quero criar um gerenciador de senhas. Vou precisar de loja que senhas em um banco de dados. Eu estou acostumado a usar Embed Firebird, mas não para dados secretos.

Outra solução é usar o banco de dados naturalmente e criptografar o arquivo de banco de dados quando não estou ligado ao arquivo, mas não tenho certeza sobre as implicações de segurança ou desempenho.

O que o melhor método que você recomendaria?

Foi útil?

Solução

Há um projeto chamado sqlite-crypt . Que deve ser sua melhor aposta. db sqlite com todos os dados no disco encriptado.

Outras dicas

Você também pode ter um olhar para edição SQL Server Compact, que requer apenas uma DLL e irá armazenar os dados em um único arquivo, assim como SQLite ou Access, Firebird, etc.

Ele também tem recursos de criptografia embutida.

Algumas referências:

criptografia senha

Veja a minha resposta aos seus outro SO pergunta SO .

Honestamente? Use TrueCrypt ou KeePass .

Eu concordo com CJM, mas se você está morto-set em escrever o seu próprio, você deve criptografar o fluxo de write-tempo e decifrá-lo na leitura do tempo. Qualquer algoritmo publicado que é um pouco forte deve manter as coisas seguras.

O REALbasic built-in suporte para trabalhar com bancos de dados SQLite criptografados tem funcionado bem para mim em um par de projectos.

Eu recomendo que você confira SQLCipher (full-divulgação, eu sou um dos os desenvolvedores!) é uma implementação livre e de código aberto de, criptografia página de nível transparente para SQLite. A implementação é bastante robusto, é em desenvolvimento ativo, e é muito fácil de usar (relativamente falando).

Eu segundo a sugestão de usar KeePass. É uma grande loja para dados sensíveis e expõe uma boa API bonita. Aqui está um exemplo de como ler um banco de dados padrão A senha de 2:

var dbpath = @"C:\path\to\passwords.kdbx";
var masterpw = "Your$uper$tr0ngMst3rP@ssw0rd";

var ioConnInfo = new IOConnectionInfo { Path = dbpath };
var compKey = new CompositeKey();
compKey.AddUserKey(new KcpPassword(masterpw));

var db = new KeePassLib.PwDatabase();
db.Open(ioConnInfo, compKey, null);

var kpdata = from entry in db.RootGroup.GetEntries(true)
                select new
                {
                    Group = entry.ParentGroup.Name,
                    Title = entry.Strings.ReadSafe("Title"),
                    Username = entry.Strings.ReadSafe("UserName"),
                    Password = entry.Strings.ReadSafe("Password"),
                    URL = entry.Strings.ReadSafe("URL"),
                    Notes = entry.Strings.ReadSafe("Notes")

                };                                      
db.Close();
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top