1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

Trabalho criptografia C

Discussão em 'Programação' iniciada por Rock_67, 6 de Dezembro de 2008. (Respostas: 4; Visualizações: 4317)

  1. Boas pessoal
    tenho aqui um projecto que nao sei bem como começar,gostaria imenso que m dessem umas dicas para a inicializaçao de um programa em linguagem C...passo a explicar o objectivo do programa!!
    Escrever um programa, em linguagem C, que permita decifrar um determinado
    texto, escrito em língua portuguesa e que foi cifrado por um método de substituição
    mono-alfabético.
    A tarefa será executada sem se conhecer a chave de substituição que deu origem
    ao texto cifrado. A técnica para realizar o ataque tem como base a análise estatística dos
    caracteres da língua portuguesa. Por exemplo, o carácter que aparece mais vezes num
    texto de língua portuguesa é o a. Então, o símbolo que aparecer mais vezes na mensagem
    cifrada terá que corresponder ao original a. O segundo símbolo com maior frequência é o
    e e pela mesma lógica o símbolo com a segunda maior taxa de ocorrência na mensagem
    cifrada corresponderá à letra original e. Para que este método de ataque funcione, o texto
    a decifrar terá que ser suficientemente longo. Tenha em atenção que, para
    simplificação, o texto fornecido não contém espaços, nem caracteres acentuados, nem
    caracteres de pontuação. Assim, o programa escrito em linguagem C não deverá
    apresentar o texto decifrado com espaços, nem com caracteres acentuados e nem com
    caracteres de pontuação.
    Para se construir o programa suponha-se que a sequência seguinte apresenta a ordem
    decrescente (da esquerda para a direita) da frequência dos caracteres na língua
    portuguesa:
    a e o s r d n i t m u l c v p g q b f h j x z k y w
    Desta forma, o carácter que aparece mais vezes é o a e o que aparece menos vezes
    é o w.
    Por se tratar de um método estatístico é provável que prevaleçam caracteres
    errados na mensagem final decifrada. Mas como esse facto surge de forma marginal, é
    facilmente possível, por acção humana, reconstruir o texto original.

    Texto a decifrar
    cscmxcszfsocmfzscssjncwcgfspezgcfkjgznvcwbmcjcwesjvcncbfmxcmzsnenk
    cgzcnvzsncazicgfsbcsscmcxcjngccwzxgcvcbmfocnczxbzmjifsziezmmcszsrfm
    kcgfsxcjsgfpezbmfxzvjccrfmkchexcnczznvmziznvzmzxfvczgjrjkcmcxnfafmzj
    nfpezvcnvfseowjxcmcxzvcxozxcsxzxfmjcsiwfmjfscsgcpezwzsmzjspezrfmcxg
    jwcvcngfcrzfjxbzmjfzcsvzmmcsajkjfscsgzcrmjkczgzcsjccngcmcxgzacsvcngfz
    cpezwzspezbfmfomcsacwzmfscsszacfgcwzjgcxfmvzwjozmvcngfkcnvcngfzsb
    cwhcmzjbfmvfgcbcmvzszcvcnvfxzcyegcmfzniznhfzcmvzkzsszxgfscojfimzifz
    gfvmfjcnfcsncazickfzsimcngzspezrjqzmcxkcwzszgzcwztcngmfzgzvmcycnfcrc
    xcgcsajvfmjcspezvjazmcxpezzekcnvffbzjvfjwesvmzwesjvcnfcpezxnzbvenfzx
    cmvzfozgzkzmcxkzsszvegffpezcxesccnvjickcnvcpezfevmfacwfmxcjscwvfszc
    wzacnvczafsvcijgzsxjnhcsbfjskmjcgfvzngzszxxjexnfafzniznhfcmgznvzszszxb
    mzzxazmsfhexjwgzkzwzomcgfrfjgzxjafssfmjfcwzmzxznvzgcjxzcifmcexsfxc
    wvfzseowjxcgfexzsvjwfimcngjwfkfzkfmmznvzbfmpezgzafsscsciecsrzoffmgz
    nzpezncfvznhcxznazyccsgzhjbfkmznzgcjxzecremjcimcngzzsfnfmfsczncfgzci
    mzsvzcazncfermcevcmegcxcsgzveockcnfmczozwjkfscpezfbzjvfckzngzzckfmc
    fizsvfxegcgcjxzjiecwkcnvfcfsrzjvfsgcrcxfsciznvzafsscpezcxcmvzvcnvfcyegcp
    ezszzsbcwhzzszkcnvznfenjazmsfszvcfseowjxzbmzkfkcozzxazmsfzafsfozxncs
    kjgcsziemcnkcgcwesjvcnccnvjicwjozmgcgzzncfxznfskzmvjssjxczsbzmcnkcgz
    cexznvfgcbzpeznckmjsvcngcgzafsfnfafvzxfmgcxcemcwcnkcxcmcajwhcrcvcw
    gcnfsscjgcgzgcgccfxengfbfmgzespezvfgffxcngzbzmcgfxengfcgzesgcmbcmvzi
    mcngz

    Cumprimentos e obrigado
     
  2. souto

    souto To fold or to FOLD?

    Assim muito rapidamente, fazes a contagem de todos os caracteres iguais que aparecem no texto, para cada letra. Ou seja, aparecem 30 x, 5 y, 3 z, etc.

    Provavelmente o x será a letra a (devido às estatísticas que tens para lingua portuguesa), logo podes tentar fazer uma substituição de todos os x por a. A seguir ao a penso que seja o o ou o i, mas não tenho a certeza. Tens que construir essa tabela de estatísticas, e fazer as contagens e as substituições seguindo o modelo acima.

    Basicamente, é isso.

    Boa sorte!

    PS: Só vi agora que já tens aí a lista de caracteres por ordem de ocorrência, portanto, melhor ainda ;)
     
    Última edição: 6 de Dezembro de 2008
  3. Peter V5

    Peter V5 Folding Member

    Consegui!! Fiz o seguinte:

    Para começar temos de arranjar os texto de maneira a que ele fique todo numa linha, de pois disso fazemos um algoritmo que vai ler o ficheiro todo e contar o numero de vezes que as letras aparecem, aqui está ele:

    Poderia ter cido feito de outra maneira mas pronto, assim resulta. O resultado que dá é basicamente que no texto do ficheiro o C aparece 215 vezes, o z aparece 193 vezes e por ai fora. Temos de ter cuidado porque tanto o g como o n aparecem ambos 79 vezes entre outros casos desses.

    Agora é só substituir no vetor que lê o ficheiro os caracteres, da seguinte maneira:
    [i][i][i][i][i][i][i][i][i][i]Os valores que eu já lá meti são deduções a que eu já cheguei, os espaços em branco são caracteres que ainda não tenho a certeza, lolol, mas rápidamente comecei a ler e reconheci o texto, é o inicio dos Lusíadas! Depois é aplicar espaços entre as palavras e pronto, a menssagem fica quebrada. Aqui está o que já fiz:

    [quote]
    as armas e os baroes assinalados
    que da ocidental praia lusitana
    pormares nunca deantes navegados
    passaram ainda alem da taprobana
    em perigos e guerras esforcados
    mais do que prometia a forca humana
    e entre gente remota e dificaram
    novo reino que tanto sublimaram

    e tambem as memorias gloriosas
    daqueles reis que foram dilatando
    a fe o imperio e as terras viciosas
    de africa e de asia andaram devastando e aqueles que por obras valerosas
    se vao da lei da morte libertando
    cantando espalhareipor toda parte se a tanto me ajudar o engenho e arte


    cessemdosabiogregoedotroianoas
    navegacoesgrandesquefi eramcalesedeale androedetrajanoafamadasvitoriasquetiveram
    queeucantoopeitoilustrelusitanoaquemneptunoemarteobedeceramcessetudooqueamusaant
    igacantaqueoutrovalormaisaltosealevantaevostagidesminhaspoiscriadotendesemmiumno
    voengenhoardentesesempreemversohumildecelebradofoidemivossorioalerementedaimeago
    raumsomaltoesublimadoumestilograndilocoecorrenteporquedevossasaguasfeboordeneque
    naotenhamenvejaasdehipocrenedaimeuafuriagrandeesonorosaenaodeagresteavenaoufraut
    arudamasdetubacanoraebelicosaqueopeoacendeeacoraogestomudadaimeigualcantoaosfeit
    osdafamosagentevossaqueamartetantoajudaqueseespalheesecantenouniversosetaosublim
    eprecocabeemversoevosobemnascidasegurancadalusitanaantigaliberdadeenaomenoscerti
    ssimaesperancadeaumentodapequenacristandadevosonovotemordamauralancamaravilhafat
    aldanossaidadedadaaomundopordeusquetodoomandeperadomundoadeusdarpartegrandel
    l lq l l l
    [/quote]e pronto é tudo, agora é só fazer o resto e temos o texto todo arranjado.


    EDIT:

    Depois de ter trabalho mais um pouco vi que a chave é:
    [QUOTE]
    case 'a': x[i] = 'v'; break;
    case 'b': x[i] = 'p'; break;
    case 'c': x[i] = 'a'; break;
    case 'd': x[i] = ' '; break;
    case 'e': x[i] = 'u'; break;
    case 'f': x[i] = 'o'; break;
    case 'g': x[i] = 'd'; break;
    case 'h': x[i] = 'h'; break;
    case 'i': x[i] = 'g'; break;
    case 'j': x[i] = 'i'; break;
    case 'l': x[i] = ' '; break;
    case 'm': x[i] = 'r'; break;
    case 'n': x[i] = 'n'; break;
    case 'o': x[i] = 'b'; break;
    case 'p': x[i] = 'q'; break;
    case 'q': x[i] = 'z'; break;
    case 'r': x[i] = 'f'; break;
    case 's': x[i] = 's'; break;
    case 't': x[i] = 'x'; break;
    case 'u': x[i] = ' '; break;
    case 'v': x[i] = 't'; break;
    case 'x': x[i] = 'm'; break;
    case 'z': x[i] = 'e'; break;
    case 'w': x[i] = 'l'; break;
    case 'k': x[i] = 'c'; break;
    case 'y': x[i] = 'j'; break;
    default: x[i] = ' ';
    [/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/QUOTE][i][i][i][i][i][i][i][i][i][i][i][i][i][i][i][i][i][i][i][i][i][i][i][i][i][i][i]

    e que o texto todo decifrado com espaço, paragrafos e sem a parte do final que são o caracteres ao calhas(porque o vector que lê o ficheiro é maior que o texto), ficará:
    [QUOTE]
    as armas e os baroes assinalados
    que da ocidental praia lusitana
    pormares nunca deantes navegados
    passaram ainda alem da taprobana
    em perigos e guerras esforcados
    mais do que prometia a forca humana
    e entre gente remota e dificaram
    novo reino que tanto sublimaram

    e tambem as memorias gloriosas
    daqueles reis que foram dilatando
    a fe o imperio e as terras viciosas
    de africa e de asia andaram devastando
    e aqueles que por obras valerosas
    se vao da lei da morte libertando
    cantando espalhareipor toda parte
    se a tanto me ajudar o engenho e arte

    cessem do sabio grego e do troiano
    as navegacoes grandes que fizeram
    cale se de alexandro e de trajano
    a fama das vitorias que tiveram
    que eu cantoo peito ilustre lusitano
    a quem neptuno e marte obedeceram
    cesse tudo o que a musa antiga canta
    que outro valor mais alto se alevanta

    e vos tagides minhas pois criado
    tendes em mi um novo engenho ardente
    se sempre em verso humilde celebrado
    foi de mi vosso rio aleremente
    dai me agora um som alto e sublimado
    um estilo grandiloco e corrente
    por que de vossas aguas febo ordene
    que nao tenham enveja as de hipocrene


    dai me ua furia grande e sonorosa
    e nao de agreste avena ou frauta ruda
    mas de tuba canora e belicosa
    que o peo acende e a cor ao gesto muda
    dai me igual canto aos feitos da famosa
    gente vossa que a marte tanto ajuda
    que se espalhe e se cante no universo
    se tao sublime preco cabe em verso

    e vos o bem nascida seguranca
    da lusitana antiga liberdade
    e nao menos certissima esperanca
    de aumento da pequena cristandade
    vos o novo temor da maura lanca
    maravilha fatal da nossa idade
    dada ao mundo por deus que todo o mande
    pera do mundo a deus dar parte grande
    [/QUOTE][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i]
     
    Última edição: 7 de Dezembro de 2008
  4. Obrigado malta! Para além de me ajudarem fizeram-me perceber como se fazia... Peter V5 obrigado também pelo código fonte embora eu esteja a tentar fazer sozinho é uma ajuda poderosa...
    Obrigado!!:001::001:
     
  5. Peter V5

    Peter V5 Folding Member

    De nada, foi um trabalho bastante porreiro, lolol, gosto de trabalho assim com cifras, hahaha
     

Partilhar esta Página