redhat Posted June 18, 2005 at 01:46 PM Report #1099 Posted June 18, 2005 at 01:46 PM Pois é, estava aqui sem nada que fazer e sem vontade nenhuma de estudar Matemática Discreta, peguei no portátil e lembrei-me dum livro que li um pouco há coisa de 5 anos atrás e que se chamava "Linux Security, a Hacker's guide to protect you linux server and workstation" escrito pelo Anonimous (porque sera...). Infelizmente o livro não era meu, e quem mo emprestou mora em Lisboa (400km daqui) penso que não o vou "ver" tão cedo... Posto isto, lembrei-me do que li acerca de encriptação, etc, etc. E como não estou com muita cabeça, fiz uns proggies em C sobre a cifra de César. Mais info: http://en.wikipedia.org/wiki/Caesar_cipher int main() { int casas=0, comp=0; char s[LENGTH]; printf("Palavra para cifrar: "); scanf(" %s", s); comp = strlen(s); while(casas != comp) { printf("%c",(char)((int)s[casas])+NUMERO); casas++; } printf("\n"); return 0; } Isto pega numa palavra (não funciona para frases...) e transforma num cifra com uma substituição de 6 casas. Se quiserem mudar, mudem o numero. int main() { int numero=0,comp=0,casas=0; char s[LENGTH]; printf("Introduza a palavra cifrada: "); scanf(" %s", s); printf("Introduza o numero de casas: "); scanf(" %d", &numero); comp = strlen(s); while(casas != comp) { printf("%c", (char)(((int)s[casas])-numero)); casas++; } printf("\n"); return 0; } Claro, se dá para encriptar, tem de dar para desencriptar. Pede-vos o número de casas a saltar. int main() { int casas=0,comp=0,a=1; char s[LENGTH]; printf("Introduza a palavra a crackar: "); scanf(" %s",s); comp = strlen(s); while(a<26) { printf("%d: ", a); while(casas != comp) { printf("%c", (char) ( ( (int) s[casas] ) -a ) ); casas++; } a++; printf("\n"); casas = 0; } printf("\n"); return 0; } Este último é para o caso de se esquecerem do número. É um CesarCipher-Cracker, ou seja, dá-vos todos os saltos possíveis. Se olharem com atenção, conseguem ver algo com legível... será essa a mensagem correcta! Bem sei que isto é super primitivo mas... foi o que me lembrei de fazer. Aqui ta um teste para verem o que isto faz: ibook-g4-de-joao-ferreira:~/Desktop/LESI/1oAno/2oSemestre/PP2/sortCode/CesarCypher jmf$ ./CC Palavra para cifrar: portugalaprogramar 112-111-114-116-117-103-97-108-97-112-114-111-103-114-97-109-97-114-0 vuxz{mgrgvxumxgsgx ibook-g4-de-joao-ferreira:~/Desktop/LESI/1oAno/2oSemestre/PP2/sortCode/CesarCypher jmf$ ./CC-reverser Introduza a palavra cifrada: vuxz{mgrgvxumxgsgx Introduza o numero de casas: 6 portugalaprogramar ibook-g4-de-joao-ferreira:~/Desktop/LESI/1oAno/2oSemestre/PP2/sortCode/CesarCypher jmf$ ./CC-cracker Introduza a palavra a crackar: vuxz{mgrgvxumxgsgx 1: utwyzlfqfuwtlwfrfw 2: tsvxykepetvskveqev 3: sruwxjdodsurjudpdu 4: rqtvwicncrtqitcoct 5: qpsuvhbmbqsphsbnbs 6: portugalaprogramar 7: onqstf`k`oqnfq`l`q 8: nmprse_j_npmep_k_p 9: mloqrd^i^moldo^j^o 10: lknpqc]h]lnkcn]i]n 11: kjmopb\g\kmjbm\h\m 12: jilnoa[f[jlial[g[l 13: ihkmn`ZeZikh`kZfZk 14: hgjlm_YdYhjg_jYeYj 15: gfikl^XcXgif^iXdXi 16: fehjk]WbWfhe]hWcWh 17: edgij\VaVegd\gVbVg 18: dcfhi[u`Udfc[fUaUf 19: cbeghZT_TcebZeT`Te 20: badfgYS^SbdaYdS_Sd 21: a`cefXR]Rac`XcR^Rc 22: `_bdeWQ\Q`b_WbQ]Qb 23: _^acdVP[P_a^VaP\Pa 24: ^]`bcUOZO^`]U`O[O` 25: ]\_abTNYN]_\T_NZN_ ibook-g4-de-joao-ferreira:~/Desktop/LESI/1oAno/2oSemestre/PP2/sortCode/CesarCypher jmf$ Abraços! [Artigo no Wiki] Software is like sex... it's better when it's free in the old days P@P "C" && "Linux" Moderator
deathseeker25 Posted June 18, 2005 at 07:17 PM Report #1110 Posted June 18, 2005 at 07:17 PM Nunca tinha ouvido falar da cifra de Caesar, mas li bastante e estou determinado a fazer tambem um programa que consigo encriptar uma palavra á escolha com essa cifra.... Resumindo, gostei bastante! Eu que estava mesmo a pensar o que fazer a seguir....acho que encontrei trabalhinho para fazer... B) 😄
febra Posted June 19, 2005 at 11:21 AM Report #1159 Posted June 19, 2005 at 11:21 AM printf("Palavra para cifrar: "); scanf(" %s", s); Isto pega numa palavra (nao funciona para frases... raio do scanf.. enfim...) e transforma num cifra com uma substituicao de 6 casas. Se quiserem mudar, mudem o NUMERO experimenta gets(s); em vez de scanf(" %s", s);
Ricardo Posted June 19, 2005 at 11:42 AM Report #1162 Posted June 19, 2005 at 11:42 AM Citação experimenta gets(s); em vez de scanf(" %s", s); Usar o 'gets(s)' é das piores práticas de programação em C. Este nunca deve ser utilizado. :!: Não deveser usado porque não permite limitar o número de caracteres lidos, potenciando assim a corrupção da memória quando se excede o limite da cadeia de caracteres passada como argumento. Usa-se 'fgets()' em vez do 'gets(). 😉 Abraços!!
redhat Posted June 19, 2005 at 01:58 PM Author Report #1169 Posted June 19, 2005 at 01:58 PM gets nem seker da! ou seja, faz um programa com gets, compila e executa... qdo ele chega ao sitio onde tens de meter a string, ele salta fora e da uma mensagem de erro B) Software is like sex... it's better when it's free in the old days P@P "C" && "Linux" Moderator
SouL-PoWeR Posted June 19, 2005 at 05:05 PM Report #1194 Posted June 19, 2005 at 05:05 PM uma cena que reparei é que tas a falhar aí numa cena: printf("Palavra para cifrar: "); scanf(" %s", s); convem meter sempre o & antes do "s" ou seja, scanf("%s",&s);
deathseeker25 Posted June 19, 2005 at 05:08 PM Report #1195 Posted June 19, 2005 at 05:08 PM Citação uma cena que reparei é que tas a falhar aí numa cena: convem meter sempre o & antes do "s" ou seja, scanf("%s",&s); Exacto sem o "&" nem funciona penso eu.... 😛
Ricardo Posted June 19, 2005 at 05:41 PM Report #1199 Posted June 19, 2005 at 05:41 PM Citação Exacto sem o "&" nem funciona penso eu.... 😛 1199 scanf("%s", s); é que está correcta Quando se usa o scanf() com strings não se usa o endereço da string, pois 's = s[0]' , logo quando se passa uma string como argumento passa-se a primeira posição do array de caracteres...B)
deathseeker25 Posted June 19, 2005 at 05:43 PM Report #1200 Posted June 19, 2005 at 05:43 PM Citação A expressão: scanf("%s", s); é que está correcta Quando se usa o scanf() com strings não se usa o endereço da string, pois 's = s[0]' , logo quando se passa uma string como argumento passa-se a primeira posição do array de caracteres...B) Hmm...I see....obrigado por pela correcção...é que ainda estou algo verde no C... Cumps
SouL-PoWeR Posted June 19, 2005 at 05:49 PM Report #1202 Posted June 19, 2005 at 05:49 PM txééé... tens razao... lo0l I'm a n00b!
redhat Posted June 19, 2005 at 08:45 PM Author Report #1220 Posted June 19, 2005 at 08:45 PM tudo a patinar 😛 Ja me explicaram o porque do & nao aparecer... vou tentar lembrar-me... É assim, as variaveis qdo sao inicializadas, ficam na memoria e o & chama o apontador para esse espaço de memoria, e espeta-lhe o valor! No real caso das strings nao leva o & pois ja se trabalha com apontadores! Entao se fizesse &s, ficava a apontar, para o apontador da string... vejam la o 31 que nao era 😄 Acho que eh assim, se nao for, corrijam-me Software is like sex... it's better when it's free in the old days P@P "C" && "Linux" Moderator
SouL-PoWeR Posted June 19, 2005 at 08:49 PM Report #1222 Posted June 19, 2005 at 08:49 PM yah, ja percebi !
deathseeker25 Posted June 19, 2005 at 08:52 PM Report #1223 Posted June 19, 2005 at 08:52 PM tudo a patinar 😛Ja me explicaram o porque do & nao aparecer... vou tentar lembrar-me... É assim, as variaveis qdo sao inicializadas, ficam na memoria e o & chama o apontador para esse espaço de memoria, e espeta-lhe o valor! No real caso das strings nao leva o & pois ja se trabalha com apontadores! Entao se fizesse &s, ficava a apontar, para o apontador da string... vejam la o 31 que nao era 😄 Acho que eh assim, se nao for, corrijam-me Tambem já percebi...como ainda não vou muito avançado achava que o & se aplicava em todas as situações... ;) Cumps
vbmaster Posted June 19, 2005 at 10:00 PM Report #1229 Posted June 19, 2005 at 10:00 PM Mas olhem lá, é impressão minha ou esse sistema de encriptação é muito básico? um bom sistem de encriptação nunca dá à mesma letra o mesmo valor.....tornar-se simples de descodificar.....mas pronto eu nao sei C e tavez isto ja seja um projecto lixado de fazer lá. Fiquem bem;)😛 ;)
deathseeker25 Posted June 19, 2005 at 10:03 PM Report #1232 Posted June 19, 2005 at 10:03 PM Mas olhem lá, é impressão minha ou esse sistema de encriptação é muito básico? um bom sistem de encriptação nunca dá à mesma letra o mesmo valor.....tornar-se simples de descodificar.....mas pronto eu nao sei C e tavez isto ja seja um projecto lixado de fazer lá.Fiquem bem;)😛 ;) Não é lixado, mas demora um bocadinho a fazer....é uma encriptação básica, mas é boa para iniciação....depois tu mesmo podes inventar as tuas técnicas de encriptação de dados... Cumps
SLider3 Posted June 19, 2005 at 11:28 PM Report #1238 Posted June 19, 2005 at 11:28 PM Mas olhem lá, é impressão minha ou esse sistema de encriptação é muito básico? um bom sistem de encriptação nunca dá à mesma letra o mesmo valor.....tornar-se simples de descodificar.....mas pronto eu nao sei C e tavez isto ja seja um projecto lixado de fazer lá.Fiquem bem;)😛 ;) Não me parece que o redhat tenha feito este programa para o usarmos pra codificar coisas 😄 ... foi apenas para mostrar como escrever em C código para esta técnica de encriptação já que é uma das mais simples e conhecidas. PS: redhat tb me apeteceu fazer código em vez de estudar pra discreta, mas desta vez segurei-me 😄 ..btw, sorte pra amanha! (ou melhor, hoje)
redhat Posted June 20, 2005 at 07:00 PM Author Report #1244 Posted June 20, 2005 at 07:00 PM ... so me apetecia mandar o prof cus porcos! fdx! enfim, fica pra recurso! 😛 Sim, eh um processo de encryptacao basico!!! Mas ta no topico que eh a cifra de cesar... mto mto mto antiga.... Software is like sex... it's better when it's free in the old days P@P "C" && "Linux" Moderator
Alcap Posted November 13, 2005 at 11:57 PM Report #6696 Posted November 13, 2005 at 11:57 PM Boas Eu sou 1 nabo em C(ainda tou a aprender(tou no 1º capitulo do Linguagem C))e esse codigo fonte da-me erros que nao consigo resolver. Podem-me mandar o ficheiro pro mail? tmaf_cerqueira@yahoo.co.uk Desde ja obrigado pela ajuda
brunogsimoes Posted July 31, 2007 at 12:31 AM Report #120944 Posted July 31, 2007 at 12:31 AM No tempo de César esta cifra deve ter dado muitas dores de cabeça aos inimigos. Agora serve para fins educativos e para o pessoal se divertir quando não tem mais nada que fazer 😉 Uso as vezes para mandar a minha namorada para o usjsdzg sem que ela me perceba.
lesiano Posted July 2, 2008 at 07:16 PM Report #195068 Posted July 2, 2008 at 07:16 PM Já agr, li sobre os scans e vi aí uns errinhos. O primeiro, é q com o scanf para strings, ñ se coloca o caracter "&", devidamente explicado pq^. Segundo, neste caso o gets coloca '\0', nalguns casos é preciso compor. Mas este foi o argumento q foi dado para se usar e foi contraposto com o de ñ haver limite de caracteres a ler e isso ser mau. fflush(stdin) --> Limpa o buffer. fgets(string_de_destino,caracteres_a_ser_lidos,stdin) --> Coloca o '\n' no fim, terá smp de se compor.
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