Jump to content
Sign in to follow this  
Sam185

Proteger Ficheiros

Recommended Posts

Sam185

Boas,

Tenho um pequeno problema, tenho um programa que cria um ficheiro binário onde esta escrita uma password escolhida pelo utilizador. Agora a password pode ser vista no bloco de notas e o ficheiro pode ser eliminado. Eu andei a ler nalguns alguns sites sobre como encriptar e desencriptar ficheiros mas não entendi muito. Será que alguém me podia tentar explicar resumidamente como se faz? E já agora se é possível proteger este ficheiro de forma a que só o meu programa consiga elimina-lo?

Obrigado desde já.

;) 


Samuel Tomé

Share this post


Link to post
Share on other sites
yyajsayy

Encriptar qualquer coisa não é nada mais nada menos do que aplicares um algoritmo sobre a tua "string" e ele vai gerar uma coisa esquisita ("isto varia de algoritmo para algoritmo").

Desencriptar é aplicares o inverso, passares da coisa esquisita para a tua string.

É claro que já existem estas funções de encriptação/desencriptação preparadas de modo a que possam ser usadas :)

Por exemplo:

http://msdn.microsoft.com/en-us/library/system.security.cryptography.hashalgorithm.aspx

Lembrei-me de MD5, tens várias ..

Agora, proteger um ficheiro de modo a que só o teu programa possa elimina-lo, eu não tenho certeza do que vou dizer, mas penso que, basta qualquer utilizador assumir permissões master(root) para que o possa eliminar.

Não sei se estou correcto, esperemos mais respostas  ;)


"If it don't work the first time, rename it to version 1.0."

http://seguranca-informatica.pt

Share this post


Link to post
Share on other sites
softklin

No caso particular do MD5, a cifra é feita num só sentido, isto é, "não há" modo de a decifrar (entre aspas, porque já existem avanços nessa área mas não é o propósito original do algoritmo).

Com MD5, basta-te guardar a hash (conteúdo obtido após cifrares) num ficheiro, e cada vez que o user introduz uma password, passá-la à função MD5 e comparar com a que está no ficheiro: se forem iguais, a password está certa, se forem diferentes, a password está incorrecta.

Quanto ao ficheiro, ocorrem-me duas coisas:

1) na instalação, criar esse ficheiro, ou garantir de alguma forma que ele se encontra presente quando o utilizador inicia a aplicação. Se não estiver presente, a aplicação não arranca ou

2) se o ficheiro não estiver presente, alertar o utilizador dessa situação e pedir nova password. Entretanto, os dados da sessão anterior são eliminados por segurança.

Partindo destas opções, podes optar por uma delas, conforme a tua situação. Esconder o ficheiro ou tentar proibir o acesso é possível, mas não se torna viável, pois facilmente um utilizador com conhecimentos vai conseguir dar a volta a esses mecanismos/encontrar o ficheiro.


Nick antigo: softclean | Tens um projeto? | Wiki P@P

Ajuda a comunidade! Se encontrares algo de errado, usa a opção "Denunciar" por baixo de cada post.

Share this post


Link to post
Share on other sites
Sam185

2) se o ficheiro não estiver presente, alertar o utilizador dessa situação e pedir nova password. Entretanto, os dados da sessão anterior são eliminados por segurança.

Esta parece-me a melhor solução, apesar de que se alguém elimina o ficheiro que contem a password,  o utilizador do programa e que fica a perder porque perde os dados todos.  ;)

Mas enfim obrigado por isso, agora em relação ao que o yyajsayy e o softclean disseram não estou mesmo a ver como vou fazer esse algoritmo.

Eu já tinha estado nesse site que referiram no comentário e não tou a enteder muito bem aquilo.


Samuel Tomé

Share this post


Link to post
Share on other sites
Sam185

Supondo que eu escolho a função MD5:

Só teria de chamar esta biblioteca (System.Security.Cryptography.MD5)?

Se alguem me pude-se disponibilizar algum tutorial de como fazer isto passo a passo agradecia...


Samuel Tomé

Share this post


Link to post
Share on other sites
softklin

No link que o yyajsayy deixou encontrei isto:

http://msdn.microsoft.com/en-us/library/system.security.cryptography.md5.aspx

Na secção de exemplos em C#, encontras lá duas funções já feitas que servem para o que tu queres:

- static string getMd5Hash(string input) : Retorna a hash de md5 para uma dada string (vão ser as passwords)

- static bool verifyMd5Hash(string input, string hash) : Verifica se dada palavra input coincide com o md5 já gerado (hash)

Agora, em vez de guardares a password em claro no teu ficheiro, tudo o que tens a fazer é gerares uma hash com a password correcta, e guardar essa hash no teu ficheiro. Essa hash é visível no ficheiro de texto com o bloco de notas na mesma, mas isso não adianta nada, porque a password original não pode ser obtida a partir daí.

Tenta correr o exemplo, para perceber melhor o funcionamento, se for preciso.


Nick antigo: softclean | Tens um projeto? | Wiki P@P

Ajuda a comunidade! Se encontrares algo de errado, usa a opção "Denunciar" por baixo de cada post.

Share this post


Link to post
Share on other sites
Sam185

Funciona, mas agora tenho um problema, quando inicio o programa outra vez uma variavel recebe o conteudo do ficheiro, quando o utilizador insere a pass da erro, so aceita o que esta escrito no ficheiro.  ;)

O que me esta a escapar?


Samuel Tomé

Share this post


Link to post
Share on other sites
Sam185

Já vi o que me tinha escapado.

Obrigado o programa esta a fazer tudo o que eu queria.

Agora perceber aquilo tudo e que terá de ser com calma.

Agora tenho outro problema tenho de proteger os dados(neste caso emails com respectivas pass) que sao mostradas ao utilizador numa listbox.

Agora encriptar da pra usar o MD5, agora pra desencriptar segundo o que disses-te nao da.

Que tipo de funcao me permite encriptar e desencriptar?


Samuel Tomé

Share this post


Link to post
Share on other sites
softklin

Ainda bem que conseguiste essa parte. Para a outra parte, vais ter de usar não uma função de hash, mas sim uma função que te permita cifrar e decifrar. Infelizmente nesse campo, só sei mesmo teoria, e não prática em C#.

Se não me engano, terás de gerar chaves a partir de uma password, por exemplo, e depois serão essas chaves (ou apenas uma no caso de usares cifra simétrica) que ter permitem cifrar e decifrar os conteúdos.

Talvez possas esperar mais respostas de alguém que tenha prática, ou se descobrires entretanto, deixar aqui um exemplo.

Cumps.


Nick antigo: softclean | Tens um projeto? | Wiki P@P

Ajuda a comunidade! Se encontrares algo de errado, usa a opção "Denunciar" por baixo de cada post.

Share this post


Link to post
Share on other sites
Sam185

Tive a ver o que fazia, mas ao correr no meu programa nao vi nenhuma diferença...  ;)


Samuel Tomé

Share this post


Link to post
Share on other sites
Sam185

Pessoal no quadro "Algoritmia Lógica" aqui do forum estive a pesquisar e não achei nada sobre cifra simétrica para aquilo que pretendo pode ter-me escapado algo.

Alguém que iniciou lá um tópico sobre isto pode indicar-me onde está por favor?


Samuel Tomé

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.