Sam185 0 Posted December 27, 2010 Report Share Posted December 27, 2010 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é Link to post Share on other sites
yyajsayy 3 Posted December 27, 2010 Report Share Posted December 27, 2010 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 Link to post Share on other sites
softklin 11 Posted December 27, 2010 Report Share Posted December 27, 2010 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. Link to post Share on other sites
Sam185 0 Posted December 27, 2010 Author Report Share Posted December 27, 2010 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é Link to post Share on other sites
Sam185 0 Posted December 27, 2010 Author Report Share Posted December 27, 2010 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é Link to post Share on other sites
softklin 11 Posted December 27, 2010 Report Share Posted December 27, 2010 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. Link to post Share on other sites
Sam185 0 Posted December 27, 2010 Author Report Share Posted December 27, 2010 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é Link to post Share on other sites
Sam185 0 Posted December 27, 2010 Author Report Share Posted December 27, 2010 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é Link to post Share on other sites
softklin 11 Posted December 27, 2010 Report Share Posted December 27, 2010 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. Link to post Share on other sites
Sam185 0 Posted December 27, 2010 Author Report Share Posted December 27, 2010 Ok obrigado pela ajuda Samuel Tomé Link to post Share on other sites
Sam185 0 Posted December 27, 2010 Author Report Share Posted December 27, 2010 O metodo File.Encrypt(); e File.Desencrypt(); fazem o que ao certo? Samuel Tomé Link to post Share on other sites
yyajsayy 3 Posted December 28, 2010 Report Share Posted December 28, 2010 Encrypt: http://msdn.microsoft.com/en-us/library/system.io.file.encrypt.aspx Desencrypt: http://msdn.microsoft.com/en-us/library/system.io.file.decrypt.aspx Tipo, essas perguntas podes obtelas todas no site "msdn.microsoft.com" poderás também estudar outros métodos e toda a API "If it don't work the first time, rename it to version 1.0." http://seguranca-informatica.pt Link to post Share on other sites
Sam185 0 Posted December 28, 2010 Author Report Share Posted December 28, 2010 OK, desculpa la. Samuel Tomé Link to post Share on other sites
Sam185 0 Posted December 28, 2010 Author Report Share Posted December 28, 2010 Tive a ver o que fazia, mas ao correr no meu programa nao vi nenhuma diferença... Samuel Tomé Link to post Share on other sites
Sam185 0 Posted December 28, 2010 Author Report Share Posted December 28, 2010 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é Link to post Share on other sites
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now