Que tal passar no Orkut e mandar um scrap que só você e a pessoa que recebe irão entender? Você com certeza já ouviu falar de encriptação, mas sabe como funciona? A encriptação é uma arte dominada por poucos, mas usada por muitos. Você a usa no seu celular, no seu e-mail, no seu banco de dados, nas transações bancárias, etc.
Bom chega de papo, essa primeira parte era para quem gosta de história como eu :-)
Agora vamos ao código, usando a famosa dupla HTML/JAVASCRIPT vou passar os comandos para você criar a sua máquina enigma, que servirá para encriptar suas mensagens e desencriptar as mensagens enviadas para você.
Copie esse código e salve com a extensão .htm, mande esse arquivo para a pessoa que irá trocar mensagens com você, mande também a senha que será usada entre vocês, lembre-se que essa senha é "sensitive case", ou seja, existe diferença entre maiúscula e minúscula, portanto Mauricio, mauricio e MAURICIO são 3 senhas diferentes.
<HTML>
<HEAD>
<TITLE>ENIGMA XOR MACHINE</TITLE>
<SCRIPT LANGUAGE="JavaScript">
function encrypt(str, pwd) {
if(pwd == null || pwd.length <= 0) {
alert("Por favor entre com a senha para encriptar a mensagem.");
return null;
}
var prand = "";
for(var i=0; i<pwd.length; i++) {
prand += pwd.charCodeAt(i).toString();
}
var sPos = Math.floor(prand.length / 5);
var mult = parseInt(prand.charAt(sPos) + prand.charAt(sPos*2) + prand.charAt(sPos*3) + prand.charAt(sPos*4) + prand.charAt(sPos*5));
var incr = Math.ceil(pwd.length / 2);
var modu = Math.pow(2, 31) - 1;
if(mult < 2) {
alert("Algoritmo não pode encontrar um hash compatível. Por favor escolha outra senha. \nConsideracoes possíveis escolha uma senha mais difícil ou maior.");
return null;
}
var salt = Math.round(Math.random() * 1000000000) % 100000000;
prand += salt;
while(prand.length > 10) {
prand = (parseInt(prand.substring(0, 10)) + parseInt(prand.substring(10, prand.length))).toString();
}
prand = (mult * prand + incr) % modu;
var enc_chr = "";
var enc_str = "";
for(var i=0; i<str.length; i++) {
enc_chr = parseInt(str.charCodeAt(i) ^ Math.floor((prand / modu) * 255));
if(enc_chr < 16) {
enc_str += "0" + enc_chr.toString(16);
} else enc_str += enc_chr.toString(16);
prand = (mult * prand + incr) % modu;
}
salt = salt.toString(16);
while(salt.length < 8)salt = "0" + salt;
enc_str += salt;
return enc_str;
}
function decrypt(str, pwd) {
if(str == null || str.length < 8) {
alert("Não foi possível desencriptar pois a mensagem e muito pequena os cálculos retornam um numero negativo.");
return;
}
if(pwd == null || pwd.length <= 0) {
alert("Por favor coloque a senha para desencriptar a mensagem.");
return;
}
var prand = "";
for(var i=0; i<pwd.length; i++) {
prand += pwd.charCodeAt(i).toString();
}
var sPos = Math.floor(prand.length / 5);
var mult = parseInt(prand.charAt(sPos) + prand.charAt(sPos*2) + prand.charAt(sPos*3) + prand.charAt(sPos*4) + prand.charAt(sPos*5));
var incr = Math.round(pwd.length / 2);
var modu = Math.pow(2, 31) - 1;
var salt = parseInt(str.substring(str.length - 8, str.length), 16);
str = str.substring(0, str.length - 8);
prand += salt;
while(prand.length > 10) {
prand = (parseInt(prand.substring(0, 10)) + parseInt(prand.substring(10, prand.length))).toString();
}
prand = (mult * prand + incr) % modu;
var enc_chr = "";
var enc_str = "";
for(var i=0; i<str.length; i+=2) {
enc_chr = parseInt(parseInt(str.substring(i, i+2), 16) ^ Math.floor((prand / modu) * 255));
enc_str += String.fromCharCode(enc_chr);
prand = (mult * prand + incr) % modu;
}
return enc_str;
}
// End -->
</script>
</HEAD>
<BODY>
<form name="box"><center>
<p>Toda mensagem para ser criptografada deve ser colocada no primeiro campo, digite a senha entre os botoes e clique encrypt, a mensagem será encriptada no segundo campo copie e cole na pagina desejada.</p>
<p>Para desencriptar, coloque a mensagem recebida no segundo campo e digite a senha recebida, clique decrypt no campo 1 ira aparecer a mensagem enviada... Caso esteja ilegível repita o processo prestando atenção na senha. </p>
Agora é só escrever sua mensagem, colocar sua senha e mandar para a pessoa desejada.
Quero deixar bem claro que esse script deve ser usado com responsabilidade, o conteúdo das mensagens que você mandar serão sigilosos e seguros, dependendo das duas pessoas envolvidas guardarem a senha entre eles.
Caso alguém copie esse código e não tenha a senha não quer dizer que a pessoa vai saber o que você escreveu, pois a senha errada vai retornar uma mensagem incompreensível. Não use esse script para uso ilegal como comunicação com alguém na cadeia para planejar uma fuga ou planejar seqüestro, etc. :)
[3] Comentário enviado por M4iir1c10 em 16/04/2007 - 07:20h
E isso ai Tenchi, eu fiz e estou preparando um outro que faz a conversao de ascii para hexadecimal e unicode os caracteres em ascii sao esses que vc esta lendo agora os hexadecimais sao (0-1-2-3-4-5-6-7-8-9-A-B-C-D-E-F), ja o unicode e a codificacao de cada tecla do seu teclado em todos os idiomas do mundo (Latin, Chines, Japones, Israelense, Russo, Hindi, etc).
Bom Ruy o negocio e o seguinte, a encriptacao em xor e diferente da hexa porque a chave e uma variavel, oque esse script faz e comparar a primeira area de texto com a senha e produzir o codigo na segunda area de texto, portando a chave e o valor colocado na senha, dependendo do tamanho da senha essa chave pode ser multiplo de 32 (32x64x96x128...) um letra a mais ou a menos faz uma diferenca enorme no resultado final.
[6] Comentário enviado por mauricioht em 12/10/2007 - 16:20h
po, nem vi o código direito ( faltou paciencia e conhecimento de html ), mas, se encriptação em XOR for oq eu acho que é, digo que esta não é segura. Isso acontece porque a senha é repetida diversas vezes para seus caracteres serem combinados em XOR com cada caracter do texto. Essa repetição permite que a partir da combinação de trechos próprio resultado encriptado, você encontre a chave. Aí a única coisa que vc precisa "advinhar" é o comprimento da senha, pra saber a freqüencia de repetição dela, basta sair testando, já que o processo é rápido. A não ser que a chave seja maior que o texto.
Tinha visto um programa que quebrava a criptografia, mas isso foi na época do Visual Basic + Windows....
[7] Comentário enviado por M4iir1c10 em 12/10/2007 - 22:32h
Nao vou dizer que essa encriptacao e a mais segura do momento porque nao e, mais eu posso dizer que e uma das mais seguras, para vc ter uma ideia os caras para descobrir o sgnificado de uma carta do hitler encriptada em xor tiveram que estudar os possiveis cauculos de 1926 ate 1933 quando finalmente eles conseguiram... oque torna essa encriptacao dificil de ser decifrada e que o resultado dos caracteres nunca sao iguais, como voce esta imaginando...
Ao que eu entendi da sua explicacao, voce le a mensagem e procura a letra A digamos que a letra A se ja encriptada como Bg entao onde vc encontrar Bg no texto vc assume que seja a letra A, porem nao e isso que acontece.
se vc colocar a letra A na parte da mensagem 4 vezes e colocar a senha A.
O primeiro A=fa18
O segundo A=7aa5
O terceiro A=04b3
O quarto A=cda8
AAAA=fa187aa504b3cda8
ou seja a letra nunca vai ser repetida na mensagem encriptada mesmo que repita na mensagem normal.
Agora se a senha for AA
A=9b53
A=f6dc
A=039b
A=4114
entao senha A
palavra AAAA=fa187aa504b3cda8
senha AA
palavra AAAA=9b53f6dc039b4114
Detalhe mesmo acrescentando um A a mais na senha o tamanho da palavra ainda e proporcional a palavra original, ou seja A = uma letra
fa18 = 4 letras, A = uma letra 9b53 = 4 letras.
embora oque fez a diferenca de fa18 para 9b53 foi um A a mais na senha.
entao ate eu achar uma combinacao que encaixe com a original serao bilhoes de tentativas ate encontrar a correta, nao e atoa que para decifrar uma carta eles levaram 7 anos.
[8] Comentário enviado por claonilton em 17/04/2008 - 19:17h
Muito bom... este sistema de encriptação conheço um tb muito antigo conhecido como "quadrado perfeito" e acredito que foi o primeiro método de encriptação.
[10] Comentário enviado por M4iir1c10 em 05/11/2008 - 03:49h
Existir existe como qualquer outra encriptacao, porem pela complexidade e a variacao fica dificil de quebrar como mencionei no comentario a cima levaram 7 anos para decifrarem uma carta de Hitler com essa encriptacao.
[11] Comentário enviado por gabriel_h em 22/06/2012 - 20:00h
Não posso afirmar que a encriptação é fraca ou forte, mas o tempo que demoraram pra decifrar a carta em 1926 é praticamente irrelevante, considerando os avanços na capacidade de processamento desde aquela epoca, um smartphone de hoje supera de longe todas as formas de computação que existiam no mundo na época somadas, logo se na epoca quebraram em 7 anos por um processo algoritmizavel, hj em dia seria quebravel em minutos, o problema é se esse processo é algoritmizavel ou não