Ir para conteúdo
  • Cadastre-se

[C] Checar acesso com criptografia simples


Posts Recomendados

Estava testando algumas funções e fiz esse código aqui, ele é bem simples mas ajuda a entender uma criptografia bem simples, leitura e escrita em arquivos, a utilização do switch e funções.

Este programa lê uma senha informada pelo usuario e compara com a senha salva em "data.txt", nota-se que ela estará criptografada lá com o carácter equivalente a 2 acima do informado pelo usuario na tabela asc, exemplo: B vai ser salvo como D no arquivo, 1 como 3, e por ai vai.

Após um login com sucesso ele fornece a opção de alterar a senha com o switch e termina o programa.

 

#include <stdio.h>
#include <string.h>

void Cript(char p[20]); //Criptografa nova senha e salva no arquivo data.txt
void DCript(char p[20]); //Descriptografa senha salva no arquivo
int CheckPass(char p[20]); //Compara se a senha informada e a do arquivo são iguais

int main()
{
	int check = 1;
	char pass[20], c;
	
	while(check != 0)
	{
		printf("Password: ");
		scanf("%s", pass);
		getchar();
		check = CheckPass(pass);
	}
	
	printf("Acess allowed!\n");
	printf("a) Change password\n");
	scanf("%c", &c);
	getchar();

		switch(c)
		{
			case 'a':
				{
					printf("Enter the new password: ");
					scanf("%s", pass);
					Cript(pass);	
				}
				break;
		}
	
	return 0;
}

void Cript(char p[20])
{
	int i;
	FILE *pf;
		for(i=0; p[i] != '\0'; i++)
			p[i] = p[i]+2;
			
	pf = fopen("data.txt", "w");
	if(pf != NULL)
	{
		fprintf(pf, "%s", p);
	}
	fclose(pf);
	
	printf("Password changed!\n");
	
}

void DCript(char p[20])
{
	int i;
		for(i=0; p[i] != '\0'; i++)
			p[i] = p[i]-2;
}

int CheckPass(char p[20])
{
	char pcripted[20]="";
	FILE *pFile;
	pFile = fopen("data.txt", "r");
	if (pFile != NULL)
	{
		fscanf(pFile, "%s", pcripted);
	}
	fclose(pFile);
	DCript(pcripted);
	
	if(pcripted[0] == '\0') //Caso não haja nenhuma senha no arquivo, qualquer valor entrado será valido para o acesso
		return 0;
	
		return strcmp(pcripted, p); //Quando as duas strings forem iguais retornará 0
			
}

 

Link para o post
Compartilhar em outros sites
  • 4 weeks later...

Normalmente uma encriptação é uma via de mão única, você vai mas não volta. Por isso elas são "seguras", pois caso alguém ganhe acesso a várias senhas, ele não consegue descobrir seu formato em plaintext.

 

Um exemplo seria em OT mesmo, que usa uma criptografia que se não me engano é SHA1 (Os mais novos). O que um OT faz? Quando você cria uma conta, com a senha '123456', ele encripta a senha para '7c4a8d09ca3762af61e59520943dc26494f8941b'. Quando você tenta logar no servidor, ele não pega o encriptado, 'desencripta' e compara com plain-text, ele encripta a senha que você mandou e compara com a senha encriptada. Assim você realmente tem uma certa segurança. 

Link para o post
Compartilhar em outros sites
Em 02/12/2015 10:47:20, Elwyn disse:

Normalmente uma encriptação é uma via de mão única, você vai mas não volta. Por isso elas são "seguras", pois caso alguém ganhe acesso a várias senhas, ele não consegue descobrir seu formato em plaintext.

 

Um exemplo seria em OT mesmo, que usa uma criptografia que se não me engano é SHA1 (Os mais novos). O que um OT faz? Quando você cria uma conta, com a senha '123456', ele encripta a senha para '7c4a8d09ca3762af61e59520943dc26494f8941b'. Quando você tenta logar no servidor, ele não pega o encriptado, 'desencripta' e compara com plain-text, ele encripta a senha que você mandou e compara com a senha encriptada. Assim você realmente tem uma certa segurança. 

 

Amigo, criptografia é você codificar um texto, o texto é codificado baseado em uma função. Quem cria a criptografia consegue sim descriptografar, quem possui a "chave" que foi utilizada para criptografar consegue retornar ao texto original, é claro que criar uma criptografia e liberar a "chave" dela pela internet perde todo sentido de criar uma criptografia, o método acima citado é apenas um exemplo de uma bem simples que eu mesmo inventei como exemplo, se eu quisesse multiplicar o o código referente a cada digito por um número primo gigante dificilmente alguem decifraria sem conhecimentos no assunto, mas não deixa de ser criptografia por ser simples, seja simples ou complexa ainda é criptografia.

Link para o post
Compartilhar em outros sites
2 horas atrás, alfbru disse:

Amigo, criptografia é você codificar um texto, o texto é codificado baseado em uma função. Quem cria a criptografia consegue sim descriptografar, quem possui a "chave" que foi utilizada para criptografar consegue retornar ao texto original, é claro que criar uma criptografia e liberar a "chave" dela pela internet perde todo sentido de criar uma criptografia, o método acima citado é apenas um exemplo de uma bem simples que eu mesmo inventei como exemplo, se eu quisesse multiplicar o o código referente a cada digito por um número primo gigante dificilmente alguem decifraria sem conhecimentos no assunto, mas não deixa de ser criptografia por ser simples, seja simples ou complexa ainda é criptografia.

 

Citar

Normalmente uma encriptação é uma via de mão única, você vai mas não volta. Por isso elas são "seguras", pois caso alguém ganhe acesso a várias senhas, ele não consegue descobrir seu formato em plaintext.

 

Não discordei de você. Apenas notei que para encriptação, principalmente de senha, é preferível usar uma encriptação de mão única.

Link para o post
Compartilhar em outros sites
9 horas atrás, Elwyn disse:

 

 

Não discordei de você. Apenas notei que para encriptação, principalmente de senha, é preferível usar uma encriptação de mão única.

O que eu quis dizer é que não existe encriptação de mão única amigo, até porque para encriptar você precisa realizar uma operação sobre o dado, para descriptografar é só realizar a operação reversa.

Link para o post
Compartilhar em outros sites
10 horas atrás, alfbru disse:

O que eu quis dizer é que não existe encriptação de mão única amigo, até porque para encriptar você precisa realizar uma operação sobre o dado, para descriptografar é só realizar a operação reversa.

https://en.wikipedia.org/wiki/MD5#Pseudocode

 

Certas encriptações são tão complexas que podem ser consideradas de mão única até algum gênio conseguir descobrir a volta. Você tem ai o pseudocódigo da MD5, se você conseguir descobrir o que isso aqui significa: 5408b91c228722e3494a6f7b54bff446 (Se você realmente for tentar, me manda PM que eu te passo o plaintext que gerou essa hash), você pode entrar em qualquer empresa de segurança no mundo só botando no seu currículo que você descobriu como desencriptografar MD5.

 

Outros exemplos: SHA2 e SHA3. Com SHA1 aconteceu o que estou te propondo agora, descobriram a volta e ela ficou obsoleta.

Existem criptografias cujo único objetivo é ser uma via de mão única.

 

Edit:

Essas formas de criptografia são tão complexa, que as falhas de segurança nelas não é a volta (ter a hash e conseguir o plaintext), é a colisão (plaintext diferentes darem a mesma hash). 

Editado por Elwyn (veja o histórico de edições)
Link para o post
Compartilhar em outros sites

antes de dar minhas considerações esqueçam a palavra encriptar e codificado. é um termo horrível para tentar se expressar, a melhor definição é algoritmos para esconder o real conteúdo.

 

11 horas atrás, alfbru disse:

O que eu quis dizer é que não existe encriptação de mão única amigo, até porque para encriptar você precisa realizar uma operação sobre o dado, para descriptografar é só realizar a operação reversa.

 

nem sempre é possível realizar a operação reversa. se eu te dar um hash você consegue fazer o inverso sabendo o algoritmo que foi utilizado? Existe sim algoritmo de criptografia de mão única, eles são trabalhosas de fazer a operação inversa, mas existe sim. Também tem a TrapDoor que são aquelas que normalmente tem uma outra chave para de fator executar o processo reverso, quando possível. Leia sobre RSA e me diga o que ela é.

 

23 horas atrás, alfbru disse:

 

Amigo, criptografia é você codificar um texto, o texto é codificado baseado em uma função. Quem cria a criptografia consegue sim descriptografar, quem possui a "chave" que foi utilizada para criptografar consegue retornar ao texto original, é claro que criar uma criptografia e liberar a "chave" dela pela internet perde todo sentido de criar uma criptografia, o método acima citado é apenas um exemplo de uma bem simples que eu mesmo inventei como exemplo, se eu quisesse multiplicar o o código referente a cada digito por um número primo gigante dificilmente alguem decifraria sem conhecimentos no assunto, mas não deixa de ser criptografia por ser simples, seja simples ou complexa ainda é criptografia.

 

Criptografia é um algoritmo para esconder o real texto através de cálculos macabros. O algoritmo que seu código utiliza, pelo que eu entendi, ele só pegar o char code e decrementa dois números do original.

void DCript(char p[20])
{
	int i;
		for(i=0; p[i] != '\0'; i++)
			p[i] = p[i]-2;
}

 

1 hora atrás, Elwyn disse:

https://en.wikipedia.org/wiki/MD5#Pseudocode

 

Certas encriptações são tão complexas que podem ser consideradas de mão única até algum gênio conseguir descobrir a volta. Você tem ai o pseudocódigo da MD5, se você conseguir descobrir o que isso aqui significa: 5408b91c228722e3494a6f7b54bff446 (Se você realmente for tentar, me manda PM que eu te passo o plaintext que gerou essa hash), você pode entrar em qualquer empresa de segurança no mundo só botando no seu currículo que você descobriu como desencriptografar MD5.

 

Outros exemplos: SHA2 e SHA3. Com SHA1 aconteceu o que estou te propondo agora, descobriram a volta e ela ficou obsoleta.

Existem criptografias cujo único objetivo é ser uma via de mão única.

 

Edit:

Essas formas de criptografia são tão complexa, que as falhas de segurança nelas não é a volta (ter a hash e conseguir o plaintext), é a colisão (plaintext diferentes darem a mesma hash).

 

 

O que aconteceu com o MD5, SHA1 não foi simplesmente fazer o processo reverso e sim mapeá-la. Ai que é que está a sacada. O Crackstation, serviço que fornece online password hash crack, simplesmente foram criptografando praticamente de A-Z, 0-9, caracteres especiais e todas as combinações entre eles e indexaram o hash. dai quando tu joga lá no site, ele olha no se eles tem aquele hash. O MD5 por ser mais velho, já mapearam bem mais.

 

Citar

CrackStation uses massive pre-computed lookup tables to crack password hashes. These tables store a mapping between the hash of a password, and the correct password for that hash. The hash values are indexed so that it is possible to quickly search the database for a given hash. If the hash is present in the database, the password can be recovered in a fraction of a second. This only works for "unsalted" hashes. For information on password hashing systems that are not vulnerable to pre-computed lookup tables, see our hashing security page.

 

dgnlev.png

Link para o post
Compartilhar em outros sites
8 horas atrás, Elwyn disse:

https://en.wikipedia.org/wiki/MD5#Pseudocode

 

Certas encriptações são tão complexas que podem ser consideradas de mão única até algum gênio conseguir descobrir a volta. Você tem ai o pseudocódigo da MD5, se você conseguir descobrir o que isso aqui significa: 5408b91c228722e3494a6f7b54bff446 (Se você realmente for tentar, me manda PM que eu te passo o plaintext que gerou essa hash), você pode entrar em qualquer empresa de segurança no mundo só botando no seu currículo que você descobriu como desencriptografar MD5.

 

Outros exemplos: SHA2 e SHA3. Com SHA1 aconteceu o que estou te propondo agora, descobriram a volta e ela ficou obsoleta.

Existem criptografias cujo único objetivo é ser uma via de mão única.

 

Edit:

Essas formas de criptografia são tão complexa, que as falhas de segurança nelas não é a volta (ter a hash e conseguir o plaintext), é a colisão (plaintext diferentes darem a mesma hash). 

 

 

 

 

Mas é claro, qual seria o significado de criar uma criptografia "simples" para uso em empresas, bancos, etc...

É obvio que eu não consigo descriptografar tais citadas, mas elas não deixam de ser vias de mão única, quem inventou consegue voltar então logo não é impossível nem é uma via de mão única

7 horas atrás, gpedro disse:

antes de dar minhas considerações esqueçam a palavra encriptar e codificado. é um termo horrível para tentar se expressar, a melhor definição é algoritmos para esconder o real conteúdo.

 

 

nem sempre é possível realizar a operação reversa. se eu te dar um hash você consegue fazer o inverso sabendo o algoritmo que foi utilizado? Existe sim algoritmo de criptografia de mão única, eles são trabalhosas de fazer a operação inversa, mas existe sim. Também tem a TrapDoor que são aquelas que normalmente tem uma outra chave para de fator executar o processo reverso, quando possível. Leia sobre RSA e me diga o que ela é.

 

 

Criptografia é um algoritmo para esconder o real texto através de cálculos macabros. O algoritmo que seu código utiliza, pelo que eu entendi, ele só pegar o char code e decrementa dois números do original.


void DCript(char p[20])
{
	int i;
		for(i=0; p[i] != '\0'; i++)
			p[i] = p[i]-2;
}

 

 

O que aconteceu com o MD5, SHA1 não foi simplesmente fazer o processo reverso e sim mapeá-la. Ai que é que está a sacada. O Crackstation, serviço que fornece online password hash crack, simplesmente foram criptografando praticamente de A-Z, 0-9, caracteres especiais e todas as combinações entre eles e indexaram o hash. dai quando tu joga lá no site, ele olha no se eles tem aquele hash. O MD5 por ser mais velho, já mapearam bem mais.

 

 

.

Sendo simples (no meu exemplo, somando 2 números na asc) ou não, não deixa de ser uma criptografia, o post é apenas um código simples que utiliza algumas funções bem comuns na linguagem além de um exemplo bem simples, como já citado, de criptografia.

E não existe criptografia de mão única, se você cria um algoritmo que modifica o texto "macabramente" ou de forma simples, existe como realizar a engenharia reversa.

 

Quanto a RSA em qualquer página que você ler sobre, estará citado que ninguém conseguiu quebrar a criptografia ainda, mas não diz que é impossível, então não é uma via de mão única.

 

Entendam, eu não estou dizendo que não existem criptografias seguras só estou falando que nenhuma é "inquebravel".
 

Citar

 

Estava testando algumas funções e fiz esse código aqui, ele é bem simples mas ajuda a entender uma criptografia bem simples, leitura e escrita em arquivos, a utilização do switch e funções.

Este programa lê uma senha informada pelo usuario e compara com a senha salva em "data.txt", nota-se que ela estará criptografada lá com o carácter equivalente a 2 acima do informado pelo usuario na tabela asc, exemplo: B vai ser salvo como D no arquivo, 1 como 3, e por ai vai.

Após um login com sucesso ele fornece a opção de alterar a senha com o switch e termina o programa.

 

 

Editado por alfbru (veja o histórico de edições)
Link para o post
Compartilhar em outros sites

Participe da conversa

Você pode postar agora e se cadastrar mais tarde. Se você tem uma conta, faça o login para postar com sua conta.

Visitante
Responder

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emojis são permitidos.

×   Seu link foi automaticamente incorporado.   Mostrar como link

×   Seu conteúdo anterior foi restaurado.   Limpar o editor

×   Não é possível colar imagens diretamente. Carregar ou inserir imagens do URL.

×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo