Jump to content
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

Duarte Godinho

Codificar Palavras

Recommended Posts

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  😲

Share this post


Link to post
Share on other 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!

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other sites
pmg

código sem tag [ code ]

Lê o tutorial de GeSHi e usa as tags de código para delimitar código. Thanks!


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!

Share this post


Link to post
Share on other sites

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 account

Sign in

Already have an account? Sign in here.

Sign In Now

×

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.