Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

Duarte Godinho

Codificar Palavras

Mensagens Recomendadas

Duarte Godinho

Boas.

Tinha intençoes de fazer um genero de codificador de palavras, em que cada letra corresponderia a outra letra que nao a inical, de modo a ter uma palavra que corresponderia a um codigo fixo, sendo possivel "traduzir" variadas palavras para outro codigo.

Todas as tentativas que fiz falharam. Alguma sugestao ? Tendo em conta que sou bastante inexperiente  😲

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
pmg

Experimentaste qualquer coisa parecida com isto (eu nao sei Pascal, por isso desculpem os erros e a falta dos tags de codigo)?

// ...
if letra = 'a' then novaletra := 'b';
if letra = 'b' then novaletra := 'o';
if letra = 'c' then novaletra := 'q';
// ...

Mete aqui o teu codigo.


What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
nunopicado

A primeira coisa que precisas para encriptar uma palavra (ou palavras) é uma chave.

É através dela que poderás encriptar e mais tarde, desencriptar o código.

Posto isto, tens de decidir se queres que a chave seja fixa, o que significa que a palavra encriptada será sempre a mesma para uma mesma palavra desencriptada, ou se preferes uma chave variável, mais segura, mas claro, mais complicado de implementar.

Uma vez conseguida a chave, precisas de a aplicar aos caracteres da tua palavra.

Para isso, o ideal é aplicares não directamente ao caracter, mas sim ao código ASCII deste, um código numérico único para cada caracter (numa determinada página de códigos) que podes conseguir com a função Ord (Ex.: Ord('A') = 65)

Como aplicas a chave ao código do caracter é contigo, desde que mantenhas a estrutura para a desencriptação. Imagina que a chave que geraste é o valor 88.

A palavra que queres converter é 'Duarte'.

Convertendo isto em código ASCII (com a função ord) ficarias com:

68 117 97 114 116 101

Só assim já é um código para a tua palavra, mas é muito simples de crackar.

Mas com a tal chave, podias por exemplo aplicar ao código ASCII, aravés de uma soma:

156 205 185 202 204 189

Já é um pouco mais dificil de desencriptar.

Quando precisares de um fazer, basta-te subtrair o valor da chave aos códigos e voltar a converter em caracter.

Se quiseres ter antes uma chave variável, a solução é inserir a propria chave, codificada de preferencia, no código.

Por exemplo

156 257 205 185 202 204 189

Aquele 257 ali é na verdade a nossa chave (88) disfarçada.

Foi só pegar nela e inseri-la no meio do código, numa posição prédeterminada. Para a codificar em 257 usei: 1ºcódigo + ultimo codigo - chave (neste caso, 156+189-88 = 257)

Ao desencriptar, o teu programa terá de pegar e somar a primeira série de numeros (156) e somar à ultima (189), subtraindo-lhe depois a segunda série (257) e ficará a saber a chave (88).

Depois, subtrai a chave a cada uma das posições (excepto a segunda) e por fim converte os resultados para string através da função CHR (ex: CHR(65) = 'A')

Com estas premissa é fácil inventar um pouco e aumentar ainda mais a segurança.

NOTA1: Na chave, evita valores reais pois no meio das contas para aplicar e extrair a chave, se houver alguma perda no arredondamento podes acabar com o código errado. É preferivel valores inteiros.

NOTA2: Se preferires o código encriptado em caracteres em vez de valores numéricos, só tens de ter o cuidado de usar uma chave que, aplicada aos códigos ASCII, não faça o código resultante sair dos valores aceitáveis pela tabela ASCII. De preferencia, o valor resultante depois da chave tem de estar acima de 32 e abaixo de 255. Se fizeres isto, podes converter os códigos resultantes em caracteres (CHR) e apresenta-los depois de encriptados, e quando fores desencriptar, voltas a converte-los em codigos ascii (ORD) antes de lhes removeres a chave.

No caso do exemplo acima, a palavra 'Duarte' encriptada ficaria assim: 'ā͹Ê̽' (Só por curiosidade, se a chave fosse 7 e não 88, o resultado seria 'K°|hy{l')

EDIT: Se precisares de ajudar para converter isto em código avisa. No entanto, seria bom que tentasses primeiro por ti, para poderes compreender melhor o funcionamento, uma vez que assim é mais facil personalizares ao teu gosto.


"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
becoming-me

fiz um programa desse tipo a pouco tempo

não e brilhante graficamente mas pode ser uma sugestão para o que procuras

experimenta correr este codigo:

program codigo;

uses crt;

var texto : string;

procedure Troca(var text:string);
var p:string[25];
    i,j,comp: integer;

begin
p:='abcdefghijklmnopqrstuvxz ';
comp:=length(text);
for i:=1 to comp do begin
for j:=1 to 25 do
  if text[i]=p[j] then write(p[26-j]);
end;
end;

begin
writeln('Insira o texto a codificar com o maximo de 255 caracteres');
readln(texto);
Troca(texto);
readln;
end.

O que este programa faz e trocar as letras pelas suas 'opostas' no alfabeto, troca o a pelos espaços e vice versa e mantem o 'm'

se não perceberes alguma parte pergunta, sei que os meus codigos são pouco explicitos

espero ter ajudado

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.