Ir ao conteúdo

Duvidas relativas a C (Cron e crypt.h)


SnakerDLK

Posts recomendados

Postado

Olá...

alguém sabe como adicionar uma tarefa ao cron através de um programa escrito em C ?

andei procurando na internet mas nao achei nenhum tutorial claro como se adiciona tarefas ao cron nem por linha de comando....

(isso em CentOS 5 e FreeBSD)

estou com um problema ao usar a funçao crypt...

de acordo com o man crypt precisa de


#define _XOPEN_SOURCE
#include <unistd.h>

(e isso compilando no gcc com a flag -lcrypt)

só que mesmo assim o gcc dá erro dizendo que a função foi declarada implicitamente...

descobri então que é necessário incluir a linha

#include <crypt.h>

bom...aii funcionou perfeitamente no CentOS 5...

só que quando tento compilar no FreeBSD ele dá erro dizendo que crypt.h nao existe...

eu consertei temporariamente com


#ifndef FREEBSD
#include <crypt.h>
#endif

e quando vou compilar no FreeBSD eu adiciono a flag

-DFREEBSD

ao gcc ....

só que nao estou conseguindo configurar isso no makefile...teria que criar dois makefiles diferentes ou duas diretivas diferentes no mesmo makefile...

também existe a opção de usar o autotools... mas não sei usar direito...só sei fazer que ele procure se todas as funçoes/etc estão presentes e definidas na máquina atual...

alguém pode me ajudar ?

agradeço...

  • 2 meses depois...
Postado

ola. eu receio que nao te posso ajudar nessa questao.

queria fazer.t uma pergunta.

como é k funciona a funcao crypt?? que tipo de argumentos recebe e que tipo de output dá?

quanto à tua kestao, uma maneira seria criares uma funcao no makefile para cada sistema operativo, por exemplo make freebsd e make centroos....

Um abraço ;)

Postado

é...só precisaria saber uma função q identifica o OS.. bom..sobre crypt... char *crypt(const char *key, const char *salt); a string chamada key é aquela q você vai encriptar com a string chamada salt... usando uma string normal como salt você terá uma encriptacao DES... mas se você usar $1$...$ você terá uma encriptacao MD5, lembrando q "..." pode ter no maximo 8 caracteres eu acho... eu nao lembro as faixas no codigo ascii... char * devolvido é um ponteiro para um espaço alocado pela própria funçao... ou seja..ao ultilizar varias vezes, tem q copiar o conteudo para outra string..senao ela será sobreescrita pela chamada nova da funçao string... acho q é isso...

Postado

hmmm, ok, acho k estou a perceber.

por exemplo, pra encryptar a palavra daniel eu teria de fazer:

crypt("abc","daniel")

correcto?

neste caso seria encryptado com a key abc.

eu estou a usar o ubuntu. k bibliotecas é k tenho de incluir no meu programa para usar a funçao crypt?? (#include ....)

muito obrigado mesmo :D :D

Postado

ahm..nao exatamente... você estaria encriptando "abc" com a string "daniel"

bom... tem detalhes q eu nao lembro direito...mas...

bom..aii um programa teste...

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

//relative to crypt
#define _XOPEN_SOURCE
#include <unistd.h>

//problematically related to crypt
#include <crypt.h>

int main(void)
{
char *resultDES, *resultMD5;
char password[255];
char salt[13];
char DES[255]; //has a fixed size I dont remember

printf("Entre com uma string de preferência aleatoria(salt) de ate 8(oito) caracteres[a-z,A-Z,0-9,.,/]:\n>");
fgets(&salt[3], 11, stdin);

if(strlen(&salt[3]) > 9)
{
printf("Caracteres demais..\n");
return 1;
}

//remove '\n'
salt[strlen(&salt[3])+2] = '\0';

//getpass is obsolete ... 'should' not be used...
strcpy(password,getpass("Insira a senha:"));

//DES encryption
resultDES = crypt(password, &salt[3]);

strcpy(DES, resultDES);

//MD5 encryption
salt[0] = salt[2] = '$';
salt[1] = '1';
strcat(salt, "$");
resultMD5 = crypt(password, salt);

if(resultMD5 == resultDES)
printf("Crypt sobre escreveu o local apontado pelo resultado do DES!\n");

printf("\"%s\" + \"%s\" : \nDES : \"%s\"\nMD5 : \"%s\"\n", salt, password, DES, resultMD5);

return 0;
}

lembrando q tem q ser compilado com o flag '-lcrpyt' ..

por exemplo "$gcc -Wall -o projeto projeto.c -lcrypt "

nota 2:

note q o 'salt' aparece na string encriptada...

é assim porque para você comparar senhas(no caso de um login) você precisa encriptar a senha com o mesmo 'salt'... e para isso ser feito em strings aleatorias, o salt pode ser lido da encriptacao...

(no caso você encriptaria a senha dada pelo usuario com o salt lido, compararia as duas strings encriptadas...e se fossem iguais o usuario estaria autenticado...)

Postado

ok SnakerDLK!

vou dar uma olhadela nesse programa e vejo se consigo tirar as ideias fundamentais e se consigo inserir a encriptaçao de pass num programa que estou a criar.

mt obrigado por tudo ;)

Mega-abraço

Postado

so mais uma coisa?

o meu gcc diz que nao reconhece a funcao crypt :S

presumo que me falta uma biblioteca qualquer....

Que biblioteca é que tenho que ter pra que a funcao funcione? Qual é o nome da biblioteca pra ver se eu ocnsigo encontrar no synaptic do ubuntu?

OBRIGADO! =)

Postado

loolll... claro. tava.me a esquecer do -lcrypt =))

ja ta a funcionar o programa eheheh :):)

so mais tenho mais uma pergunta: o output do programa dá um resultado que é do DES e outro que é do MD5. suponho que sejam duas maneiras distintas de encryptar a mesma palavra, certo? se sim, qual das duas maneiras é que aconselhas que use?

e para finalizar, nao existe maneira de desencryptar a palavra (isto é, de a partir do resultado da encryptação conseguir chegar à palavra em si) pois nao?

talvez isto te possa ajudar na questao do tutorial

http://orion.lcg.ufrj.br/compgraf1/downloads/MakefileTut.pdf

o que eu tava a dizer, era criares um makefile do genero:

# makefile para o projecto

CC = gcc

projecto: e1.o

$(CC) e1.o -lcrypt

e1.o: e1.c funcoes.h

$(CC) -c e1.c

freebsd:

$(CC) e1.o -lcrypt -DFREEBSD

#fim do makefile

e depois, sempre que tivesses a compilar no Freebsd so terias de escrever: "make freebsd" enquanto que no CentroOS so tens de escrever: "make" para compilares (sem o freebsd).

Espero que isto te ajude. Eu so estou a dar os meus primeiros passos agora em linguagem C e em makefiles por isso nao sei se isto realmente resulta ou se era esta a questao que querias ver resolvida.

depois diz.m como correu ;)

Postado

bom...

sobre DES e MD5..

a encriptação do MD5 é BEM mais forte(mais difícil de ser quebrada) doque o DES, mas também não é a prova de falhas...

nao, não é possivel decriptar a string encriptada... para ter algo q você possa encriptar e decriptar novamente você teria q procurar uma biblioteca especifica para isso ou fazer a função você mesmo

sim, era assim q eu estava fazendo no meu makefile...

mas seria melhor se tivesse como nao ter q especificar qual o sistema operacional na mao..

q tem na verdade...existe uma macro global q tem o nome do sistema operacional...mas fiquei com preguiça de pesquisar sobre isso...

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!