Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Fredericomf

Desenvolvi um algoritimo de encriptação de mensagens...

Recommended Posts

bem legal.

seria interesante tambem mostrar o codigo, e dar uma contribuição para os usuários do forum.

 

so tenho uma critica.

a descriptografia devia ser mostrada direto :D apenas para teste..

Compartilhar este post


Link para o post
Compartilhar em outros sites
  Bruno Capella disse:

bem legal.

seria interesante tambem mostrar o codigo, e dar uma contribuição para os usuários do forum.

 

so tenho uma critica.

a descriptografia devia ser mostrada direto :D apenas para teste..

 

Olá Bruno;

 

Segue o código do sistema. Estou implementando um módulo para envio da mensagem via SMTP-gmail.

 

Desculpa os comentários estarem em inglês, mas eu acostumei a programar assim.

 

<?php

/**
 * @author Frederico Mottinha de Figueiredo
 * @todo Implementar o sistema de envio via SMTP - gmail.
 * @copyright 2008
 */

class Security{
	
	
	function calcPass($key){
		//Calculating the key
		$keySize = strlen($key);
		
		//Gen key
		for($i = 0; $i < $keySize; $i++){
			$keyArray[$i] = ord(substr($key, $i, 1));
		}
		
		//Sum key
		$newKey = array_sum($keyArray);
		
		//Codifing the key
		$newKey = md5($newKey);
		$keySize = strlen($newKey);
		
		//Gen key
		for($i = 0; $i < $keySize; $i++){
			$newKeyArray[$i] = ord(substr($key, $i, 1));
		}
		
		//Final Key
		$finalKey = array_sum($newKeyArray) / 40;
		$finalKey = round($finalKey, 0);
		
		//Returning key
		return $finalKey;
				
	}

//////////////////-------------------------------------
	
	function cryptText($text, $key){
	
		//Calculating
		$finalKey = $this->calcPass($key);
			
			//->Generating the text
		
		//Reverse
		$revText = strrev($text);
		
		//Masking Text
		$newText = null;
		
		for($i = 0; $i < strlen($revText); $i++){
			
			$math = ord(substr($text, $i, 1)) + $finalKey;
			
			if(($i % 2) == 0){
			
				while($math > 255){
					
					$math = $math - 256;
					
				}
				
				if($math <= 8){
					
					$newText = $newText."0".($math + 1);
															
				}else{
					
					$newText = $newText.dechex($math + 1);
					
				}
				
			}else{
				
				while($math > 255){
					
					$math = $math - 256;
					
				}
				
				if($math <= 9){
					
					$newText = $newText."0".$math;
															
				}else{
					
					$newText = $newText.dechex($math);
					
				}
							
			}
			
			if($i != 0 && ($i % 24) == 0){
				
				$newText = $newText." ";
				
			}
			
		}
		
		return $newText;

		//Destroy Vars
		unset($key, $text, $finalKey, $i, $keyArray, $keySize, $math, $newKey, $newKeyArray, $newText, $revText);
	}
	
//////////////////-------------------------------------
	
	function decryptText($text, $key){
		
		//Calculating
		$finalKey = $this->calcPass($key);
		
		//Decrypt
		$newText = null;
		
		$text = str_replace(" ", "", $text);
		
		for($i = 0; $i < strlen($text); $i = $i + 2){
						
			$math = hexdec(substr($text, $i, 2)) - $finalKey;
			
				if(($i % 4) == 0){
			
					$newText = $newText.chr($math - 1);
				
				}else{
				
					$newText = $newText.chr($math);
				
				}
				
		}
		return $newText;
		
	}
			
}

?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

desculpe, naum entendo muito bem de criptografia, quando li seu topico, fui tentar fazer minha propria classe visando objetivo semelhante ao seu.

quando tentei aplicar a sua logica, reparei que existia um erro/falha em sua classe.

 

FALHA:

Se você usar, por exemplo, "DORIAN CONDE LANGBECK" como texto e usar uma chave do tipo "DORIAN".

ele criptografa bacaninha.

 

na hora de descriptografar, você pode usar qualquer anagrama derivado da chave, tipo: "NAIROD" ou "DRNOIA"

qualquer um desses serve para descriptografar corretamente o texto...

 

continuarei o desenvolvimento da minha classe tentando corrigir essa falha, espero q você corrija a sua e que troquemos ideias para melhoralas posteriormente...

 

Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pronto. Fiz a minha classe!

Pelo oq eu testei, o problema q eu descrevi acima (que ocorre na classe do Fredericomf) naum acontece na minha classe.

 

CONTRAS:

- O codigo gerado pela minha classe é maior do que a gerada pela classe do Fredericomf. (Neste exemplo a saida é quase 6x maior q o texto de entrada)

- Tem restrição quanto ao tamanho da senha utilizada. (CORRIGIDO)

- Ate agora é so (vcs vao adicionando os contras conforme forem encontrando)...

 

class ken_crypt {
	  private $KEY;
	  function __construct($key) {
		  $chave = str_split($key);
		  foreach ($chave as $pos=>$char) $this->KEY += ord($char)*($pos+1);
	  }
	  
	  function criptografar($string) {
		  foreach (str_split($string) as $char) $ret[] = dechex(ord($char)+$this->KEY);
		  return join(" ",$ret);
	  }
	  
	  function descriptografar($string) {
		  foreach (explode(" ",trim($string)) as $char) $ret .= chr(hexdec($char)-$this->KEY);
		  return $ret;
	  }
  }

Exemplos de uso

Criptografar:

$mensagem = "Estudando bcompiler... PHP-Gtk2 (90%)
   Qualquer duvida... MSN: ken_langbeck@yahoo.com.br
   PS: Deixe uma mensagem offline dizendo qual o neu nick no iMasters, e o link para o seu post.
   Assim eu ja posso ir analisando o seu problema...";
  
  $c = new ken_crypt("Fórum iMasters - Dórian Conde Langbeck");
  echo $c->criptografar($mensagem);
isso geraria a seguinte saida:

1125b 11289 1128a 1128b 1127a 11277 11284 1127a 11285 11236 11278 11279 11285  11283 11286 1127f 11282 1127b 11288 11244 11244 11244 11236 11266 1125e 11266  11243 1125d 1128a 11281 11248 11236 1123e 1124f 11246 1123b 1123f 11223 11220  11267 1128b 11277 11282 11287 1128b 1127b 11288 11236 1127a 1128b 1128c 1127f  1127a 11277 11244 11244 11244 11236 11263 11269 11264 11250 11236 11281 1127b  11284 11275 11282 11277 11284 1127d 11278 1127b 11279 11281 11256 1128f 11277  1127e 11285 11285 11244 11279 11285 11283 11244 11278 11288 11223 11220 11266  11269 11250 11236 1125a 1127b 1127f 1128e 1127b 11236 1128b 11283 11277 11236  11283 1127b 11284 11289 11277 1127d 1127b 11283 11236 11285 1127c 1127c 11282  1127f 11284 1127b 11236 1127a 1127f 11290 1127b 11284 1127a 11285 11236 11287  1128b 11277 11282 11236 11285 11236 11284 1127b 1128b 11236 11284 1127f 11279  11281 11236 11284 11285 11236 1127f 11263 11277 11289 1128a 1127b 11288 11289  11242 11236 1127b 11236 11285 11236 11282 1127f 11284 11281 11236 11286 11277  11288 11277 11236 11285 11236 11289 1127b 1128b 11236 11286 11285 11289 1128a  11244 11223 11220 11257 11289 11289 1127f 11283 11236 1127b 1128b 11236 11280  11277 11236 11286 11285 11289 11289 11285 11236 1127f 11288 11236 11277 11284  11277 11282 1127f 11289 11277 11284 1127a 11285 11236 11285 11236 11289 1127b  1128b 11236 11286 11288 11285 11278 11282 1127b 11283 11277 11244 11244 11244

Agora para descriptografar:

$codigo = "1125b 11289 1128a 1128b 1127a 11277 11284 1127a 11285 11236 11278 11279 11285  11283 11286 1127f 11282 1127b 11288 11244 11244 11244 11236 11266 1125e 11266  11243 1125d 1128a 11281 11248 11236 1123e 1124f 11246 1123b 1123f 11223 11220  11267 1128b 11277 11282 11287 1128b 1127b 11288 11236 1127a 1128b 1128c 1127f  1127a 11277 11244 11244 11244 11236 11263 11269 11264 11250 11236 11281 1127b  11284 11275 11282 11277 11284 1127d 11278 1127b 11279 11281 11256 1128f 11277  1127e 11285 11285 11244 11279 11285 11283 11244 11278 11288 11223 11220 11266  11269 11250 11236 1125a 1127b 1127f 1128e 1127b 11236 1128b 11283 11277 11236  11283 1127b 11284 11289 11277 1127d 1127b 11283 11236 11285 1127c 1127c 11282  1127f 11284 1127b 11236 1127a 1127f 11290 1127b 11284 1127a 11285 11236 11287  1128b 11277 11282 11236 11285 11236 11284 1127b 1128b 11236 11284 1127f 11279  11281 11236 11284 11285 11236 1127f 11263 11277 11289 1128a 1127b 11288 11289  11242 11236 1127b 11236 11285 11236 11282 1127f 11284 11281 11236 11286 11277  11288 11277 11236 11285 11236 11289 1127b 1128b 11236 11286 11285 11289 1128a  11244 11223 11220 11257 11289 11289 1127f 11283 11236 1127b 1128b 11236 11280  11277 11236 11286 11285 11289 11289 11285 11236 1127f 11288 11236 11277 11284  11277 11282 1127f 11289 11277 11284 1127a 11285 11236 11285 11236 11289 1127b  1128b 11236 11286 11288 11285 11278 11282 1127b 11283 11277 11244 11244 11244";
  
  $c = new ken_crypt("Fórum iMasters - Dórian Conde Langbeck");
  echo $c->descriptografar($codigo);

isso geraria novamente o texto de entrada:

  Citar

Estudando bcompiler... PHP-Gtk2 (90%)

Qualquer duvida... MSN: ken_langbeck@yahoo.com.br

PS: Deixe uma mensagem offline dizendo qual o neu nick no iMasters, e o link para o seu post.

Assim eu ja posso ir analisando o seu problema...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Preciso que testem essa classe.

Na classe acima, se o codigo gerado for:

xxx xxx xxx

ele apresentaria erro se você inserisse o codigo:

xxx  xxx xxx

perceberam?! tem mais de uma espaçamento...

tipo. se você gera o codigo e guarda em um arquivo bonitinho, naum teria problema...

agora, quando você tenta dar Ctrl+C/Ctrl+V em um documento do Word por exemplo, e se o codigo for muito grande, ele acaba acicionando esses espaços "extras" em alguns lugares.

 

assim, quando o codigo for descriptografado, vao aparecer alguns "ê" por ai (onde tinham espaços extras).

 

tentei corrigir isso adicionando: preg_grep("/./",explode(" ",trim($string)))

no lugar de: explode(" ",trim($string))

 

aqui em casa funciona bacana esse nova implementação, + possa ser que alguma configuração do meu PC possibilite isso.

preciso de pessoas pra testar o script em maquinas com configurações variadas (pratica essa que muitos programadores naum fazem)...

 

entao, pra quem estiver interessado em me ajudar, aqui esta a "nova" classe:

class ken_crypt {
	private $KEY;
	function __construct($key) {
		$chave = str_split($key);
		foreach ($chave as $pos=>$char) $this->KEY += ord($char)*($pos+1);
	}
	
	function criptografar($string) {
		foreach (str_split($string) as $char) $ret[] = dechex(ord($char)+$this->KEY);
		return join(" ",$ret);
	}
	
	function descriptografar($string) {
		foreach (preg_grep("/./",explode(" ",trim($string))) as $char) $ret .= chr(hexdec($char)-$this->KEY);
		return $ret;
	}
}

pra testar, favor usar os metodos do meu ultimo post...

 

PS1: Não sou muito bom em RegEx (se tiver um melhor que "/./", para descartar valores vazios na array, me avisem)

PS2: Quem testar, vai avisando se deu certo ou naum...

 

Muito obrigado!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá amigo,

 

Na realidade essa falha é apenas do fator de segurança que pode ser facilmente setado nesta linha:

 

 

//Final Key

$finalKey = array_sum($newKeyArray) / 40;

 

Mude para:

 

//Final Key

$finalKey = array_sum($newKeyArray) / 1;

 

 

A sensibilidade vai ser aumentada.

 

T+ http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

 

 

 

 

  Dórian Conde Langbeck disse:

desculpe, naum entendo muito bem de criptografia, quando li seu topico, fui tentar fazer minha propria classe visando objetivo semelhante ao seu.

quando tentei aplicar a sua logica, reparei que existia um erro/falha em sua classe.

 

FALHA:

Se você usar, por exemplo, "DORIAN CONDE LANGBECK" como texto e usar uma chave do tipo "DORIAN".

ele criptografa bacaninha.

 

na hora de descriptografar, você pode usar qualquer anagrama derivado da chave, tipo: "NAIROD" ou "DRNOIA"

qualquer um desses serve para descriptografar corretamente o texto...

 

continuarei o desenvolvimento da minha classe tentando corrigir essa falha, espero q você corrija a sua e que troquemos ideias para melhoralas posteriormente...

 

Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

+ uma melhoria...

usando o md5() (nem percebi no codigo do Fredericomf), a saida criptografada fica bem menor que no ultimo exemplo usado, ainda fazendo com q o tamanho da chave usada não infuencie no tamanho da saida (coisa q ocorria na minha ultima classe)

 

class ken_crypt {
	private $KEY;
	function __construct($key) {
		foreach (str_split(md5($key)) as $pos=>$char) $this->KEY += ord($char);
	}
	
	function criptografar($string) {
		foreach (str_split($string) as $char) $ret[] = dechex(ord($char)+$this->KEY);
		return join(" ",$ret);
	}
	
	function descriptografar($string) {
		foreach (preg_grep("/./",explode(" ",trim($string))) as $char) $ret[] = chr(hexdec($char)-$this->KEY);
		return join("",$ret);
	}
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

+ uma implementação...

 

Agora esta disponivel a opção de usar ou não a compactação gz juntamente com a criptografia.

 

CONTRAS:

- A classe é restrita ao PHP5, pricipalmente pelo uso da função str_split() (q é novidade na versao 5).

- A compactação de arquivo só se torna "lucrativa" quando o texto a ser criptografado é razoavelmente extenço.

 

NEWS:

- Suporte a compactação.

 

FULTURAS IMPLEMENTAÇÕES: (Isso vai ser em outro post)

- Criptografia segura para binarios.

- Criptografia com compactação segura para binarios.

 

class ken_crypt {
	private $KEY;
	function __construct($key) {
		foreach (str_split(md5($key)) as $pos=>$char) $this->KEY += ord($char);
	}
	
	function criptografar($string, $compress = false) {
		foreach (str_split($string) as $char) $ret[] = dechex(ord($char)+$this->KEY);
		return $compress ? $this->comprimir(join(" ",$ret)) : join(" ",$ret);
	}
	
	function descriptografar($string, $compress = false) {
		$string = $compress ? $this->descomprimir($string) : $string;
		foreach (preg_grep("/./",explode(" ",trim($string))) as $char) $ret[] = chr(hexdec($char)-$this->KEY);
		return join("",$ret);
	}
	
	private function comprimir($string) {
		foreach (str_split(gzdeflate($string,9)) as $char) $ret[] = dechex(ord($char));
		return join(" ",$ret);
	}
	
	private function descomprimir($string) {
		foreach (preg_grep("/./",explode(" ",trim($string))) as $char) $ret[] = chr(hexdec($char));
		return gzinflate(join("",$ret));
	}
}

Para testar:

$c = new ken_crypt("Fórum iMasters - Dórian Conde Langbeck");
$MSG = "gzinflate
(PHP 4 >= 4.0.4, PHP 5)

gzinflate — Descomprime uma string usando DEFLATE

Descrição
string gzinflate ( string $data [, int $length] )

Esta função descomprime uma string. 

Parâmetros

data
Os dados comprimidos por gzdeflate(). 

length
O limite de tamanho dos dados a descompactar. 


Valor Retornado
Os dados originais descomprimidos ou FALSE em caso de erro. 

Esta função irá retornar um erro se os dados descomprimidos forem maiores do 32768 vezes o tamanho dos dados comprimidos de entrada data ou mais do que o parâmetro opcional length. 

Exemplos

Exemplo 2598. Exemplo gzinflate()

<?php
$compressed   = gzdeflate('Compress me', 9);
$uncompressed = gzinflate($compressed);
echo $uncompressed;
?> 



Veja também
Veja também gzcompress(). gzuncompress(), gzdeflate(), e gzencode(). ";

$ret = $c->criptografar($MSG);
echo "<strong>Tamanho da saida:</strong> ".strlen($MSG)."<br />";
echo $MSG;
echo "<hr />";
echo "<strong>Tamanho da saida criptografada:</strong> ".strlen($ret)."<br />";
echo $ret;
echo "<hr />";
$gz = $c->criptografar($MSG,true);
echo "<strong>Tamanho da saida criptografada com compactação:</strong> ".strlen($gz)."<br />";
echo $gz;
echo "<hr />";
$des = $c->descriptografar($gz,true);
echo "<strong>Tamanho da saida:</strong> ".strlen($des)."<br />";
echo $des;
echo "<hr />";

Compartilhar este post


Link para o post
Compartilhar em outros sites

Também fiz a minha, ele pelo que me pareceu não tem falha quanto à anagramas com a chave, e o código gerado é sempre exatamente três vezes maior que o texto original. Vejam ai se encontram falhas pra eu corrigir, o código gerado é um conjunto de hexadecimais de 3 casas cada, por isso o aumento de tamanho é constance:

<?php
##
# Classe de encriptação de dados com chave
# Estas funções impossibilitam o acesso aos texto sem a chave
##
class Seguranca
{
	function __construct() {}
	##
	# Codificação simples
	##
	function encriptar($texto, $chave)
	{
		$chave = $this->chave($chave);
		$texto = str_split($texto, 1);
		$final = NULL;
		
		foreach($texto as $char)
		{
			$final .= sprintf("%03x", ord($char) + $chave);
		}
		
		return $final;
	}
	
	##
	# Decodificação simples
	##
	function decriptar($texto, $chave)
	{
		$final = NULL;
		$chave = $this->chave($chave);
		$texto = str_split($texto, 3);
		foreach($texto as $char)
		{
			$final .= chr(hexdec($char) - $chave);
		}
		
		return $final;
	}
	
	##
	# Encontrar uma chave de acordo com um texto
	##
	function chave($texto)
	{
		$texto = str_split(md5($texto), 1);
		$sinal = 0;
		$soma = 0;
		foreach($texto as $char)
		{
			if($sinal)
			{
				$soma -= ord($char);
				$sinal = 0;
			}
			else
			{
				$soma += ord($char);
				$sinal = 1;
			}
		}
		if($soma < 0)
			$soma *= -1;
		
		return $soma;
	}
}
?>

Por exemplo com a senha "brasil" e a frase "Aqui temos uma frase bem simples!" geraria o código:

06b09b09f09304a09e08f09709909d04a09f09708b04a09009c08b09d08f04a08c08f09704a09d09
309709a09608f09d04b

Compartilhar este post


Link para o post
Compartilhar em outros sites

Muito bom msm... se você reparar, na minha primeira classe eu tentei fazer dessa forma, + dava erro quando os hexadecimais chegavam na casa dos 4 digitos.

Foi quando resolvi colocar os espaços msm, eitei o post e coloquei corrigido no problema.

 

Naum vi nenhum erro no seu codigo, parece que ele tbm tem a desvantagem de ser preso ao PHP5 ja que você tbm usa o str_split().

Seria bom se você implementasse compactação no seu, pois depois de um ponto (+/- 2000 chars), a minha classe passa a ter uma saida menor q a sua (quando ativo o mode de compactação).

 

usei o seguinte codigo para testar:

<?php
$MSG = " 
Anterior  VI. Referência das Funções  Próxima 

--------------------------------------------------------------------------------

XLV. FriBiDi
Introdução
FriBiDi é uma implementação livre de » Unicode Bidirectional Algorithm. 

Dependências
Você deverá copiar e instalar o pacote » FriBiDi. 

Instalação
Esta extensão » PECL não vem compilada com o PHP. Informações para a instalação desta extensão PECL podem ser encontradas no manual no capitulo entitulado Instalação de extensões PECL. Informações adicionais como novas versões, downloads, arquivos fontes, manutenções, e um Changelog, podem ser obtidos aqui: » http://pecl.php.net/package/fribidi. 

Para poder usar estas funções você deve compilar o PHP com suporte Fribidi usando a opção de configuração --with-fribidi[=DIR]. 

usuários do Windows irão ativar php_fribidi.dll dentro do php.ini para poder usar estas funções. A DLL para esta extensão PECL deve ser copiada da pagina de » Downloads do PHP ou de » http://pecl4win.php.net/ 

Configurações em execução

Tipos Resource
Esta extensão não possui nenhum tipo resource.

Constantes pré-definidas
As contantes abaixo são definidas por esta extensão e somente estarão disponíveis quando a extensão foi compilada com o PHP ou carregada dinamicamente durante a execução. 

FRIBIDI_CHARSET_UTF8 (integer) 
Unicode 
FRIBIDI_CHARSET_8859_6 (integer) 
Arabic 
FRIBIDI_CHARSET_8859_8 (integer) 
Hebrew 
FRIBIDI_CHARSET_CP1255 (integer) 
Hebrew/Yiddish 
FRIBIDI_CHARSET_CP1256 (integer) 
Arabic 
FRIBIDI_CHARSET_ISIRI_3342 (integer) 
Persian 
FRIBIDI_CHARSET_CAP_RTL (integer) 
Usado para fim de teste, irá tratar CAPS como letras não Inglesas 
FRIBIDI_RTL (integer) 
Direita para esquerda 
FRIBIDI_LTR (integer) 
Esquerda para direita 
FRIBIDI_AUTO (integer) 
Autodetecta a direção base. 
Índice
fribidi_log2vis — Converte uma string lógica para uma visual

--------------------------------------------------------------------------------
Anterior  Acima  Próxima 
PDO_FIREBIRD DSN  Principal  fribidi_log2vis 
";

class ken_crypt {
	private $KEY;
	function __construct($key) {
		foreach (str_split(md5($key)) as $pos=>$char) $this->KEY += ord($char);
	}
	
	function criptografar($string, $compress = false) {
		foreach (str_split($string) as $char) $ret[] = dechex(ord($char)+$this->KEY);
		return $compress ? $this->comprimir(join(" ",$ret)) : join(" ",$ret);
	}
	
	function descriptografar($string, $compress = false) {
		$string = $compress ? $this->descomprimir($string) : $string;
		foreach (preg_grep("/./",explode(" ",trim($string))) as $char) $ret[] = chr(hexdec($char)-$this->KEY);
		return join("",$ret);
	}
	
	private function comprimir($string) {
		foreach (str_split(gzdeflate($string,9)) as $char) $ret[] = dechex(ord($char));
		return join(" ",$ret);
	}
	
	private function descomprimir($string) {
		foreach (preg_grep("/./",explode(" ",trim($string))) as $char) $ret[] = chr(hexdec($char));
		return gzinflate(join("",$ret));
	}
}
$c = new ken_crypt("brasil");
$saida = $c->criptografar($MSG,true);
echo "Tamanho da saida: ".strlen($saida)."<br>$saida";
?>
<hr>
<?php
##
# Classe de encriptação de dados com chave
# Estas funções impossibilitam o acesso aos texto sem a chave
##
class Seguranca
{
	function __construct() {}
	##
	# Codificação simples
	##
	function encriptar($texto, $chave)
	{
		$texto = str_split($texto, 1);
		$final = NULL;
		
		foreach($texto as $char)
		{
			$final .= sprintf("%03x", ord($char) + $chave);
		}
		
		return $final;
	}
	
	##
	# Decodificação simples
	##
	function decriptar($texto, $chave)
	{
		$final = NULL;
		$texto = str_split($texto, 3);
		foreach($texto as $char)
		{
			$final .= chr(hexdec($char) - $chave);
		}
		
		return $final;
	}
	
	##
	# Encontrar uma chave de acordo com um texto
	##
	function chave($texto)
	{
		$texto = str_split(md5($texto), 1);
		$sinal = 0;
		$soma = 0;
		foreach($texto as $char)
		{
			if($sinal)
			{
				$soma -= ord($char);
				$sinal = 0;
			}
			else
			{
				$soma += ord($char);
				$sinal = 1;
			}
		}
		if($soma < 0)
			$soma *= -1;
		
		return $soma;
	}
}

$saida2 = Seguranca::encriptar($MSG,Seguranca::chave("brasil"));
echo "Tamanho da saida: ".strlen($saida2)."<br>$saida2";
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Melhorando o codigo do Wanderson...

##
# Classe de encriptação de dados com chave
# Estas funções impossibilitam o acesso aos texto sem a chave
##
class Seguranca
{
	private $chave; //Encapsular variaveis
	##
	# Encontrar uma chave de acordo com um texto
	##
	function __construct($texto) {
		$texto = str_split(md5($texto), 1);
		$sinal = false;
		foreach($texto as $char) {
			if($sinal = !$sinal) $soma -= ord($char); //Alternarndo o sinal no proprio laço. Usar boolean é melhor do que usar integer
			else $soma += ord($char); //Usar essa organização no if economiza mais memoria
		}
		if($soma < 0) $soma *= -1;
		$this->chave = $soma; //Armazenado a chave dentro da propria instancia...
	}
	##
	# Codificação simples
	##
	function encriptar($texto)
	{
		$texto = str_split($texto, 1);
		foreach($texto as $char) $final[] = sprintf("%03x", ord($char) + $this->chave); //Usar array é mais rapido do que concatenar strings
		return join("",$final);
	}
	
	##
	# Decodificação simples
	##
	function decriptar($texto)
	{
		$texto = str_split($texto, 3);
		foreach($texto as $char) $final .= chr(hexdec($char) - $this->chave); //Usar array é mais rapido do que concatenar strings
		return join("",$final);
	}
}

Acho q é so... ^^

Abraços!

 

PS: Conceitos do que é mais rapido ou economiza mais memória, eu usei JAVA como base...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tá, passei a usar booleano ao invés de inteiro. E adicionei a compressão, vê ai, com o texto que você testou as duas a minha finalizou com 2904 caracteres.

<?php
class Seguranca
{
	private $chave;
	private $compactar;
	function __construct($chave = '', $compactar = false)
	{
		$texto = str_split(md5($texto), 1);
		$sinal = false;
		$soma = 0;
		foreach($texto as $char)
		{
			if($sinal)
			{
				$soma -= ord($char);
				$sinal = false;
			}
			else
			{
				$soma += ord($char);
				$sinal = true;
			}
		}
		if($soma < 0)
			$soma *= -1;
		
		$this->chave = $soma;
		$this->compactar = $compactar;
	}
	##
	# Encriptação
	##
	function encriptar($texto)
	{
		if($this->compactar)
			$texto = gzdeflate($texto, 9);
			
		$texto = str_split($texto, 1);
		$final = NULL;
		
		foreach($texto as $char)
		{
			$final .= sprintf("%03x", ord($char) +  $this->chave);
		}
		
		return $final;
	}
	
	##
	# Decriptação
	##
	function decriptar($texto)
	{
		if($this->compactar)
			$texto = gzinflate($texto);
		
		$final = NULL;
		$texto = str_split($texto, 3);
		foreach($texto as $char)
		{
			$final .= chr(hexdec($char) -  $this->chave);
		}
		
		return $final;
	}
}
?>
E pra testar usei assim:

CODE
<?php

// ...

 

$MSG = "

Anterior VI. Referência das Funções Próxima

 

--------------------------------------------------------------------------------

 

XLV. FriBiDi

Introdução

FriBiDi é uma implementação livre de » Unicode Bidirectional Algorithm.

 

Dependências

Você deverá copiar e instalar o pacote » FriBiDi.

 

Instalação

Esta extensão » PECL não vem compilada com o PHP. Informações para a instalação desta extensão PECL podem ser encontradas no manual no capitulo entitulado Instalação de extensões PECL. Informações adicionais como novas versões, downloads, arquivos fontes, manutenções, e um Changelog, podem ser obtidos aqui: » http://pecl.php.net/package/fribidi.

 

Para poder usar estas funções você deve compilar o PHP com suporte Fribidi usando a opção de configuração --with-fribidi[=DIR].

 

usuários do Windows irão ativar php_fribidi.dll dentro do php.ini para poder usar estas funções. A DLL para esta extensão PECL deve ser copiada da pagina de » Downloads do PHP ou de » http://pecl4win.php.net/

 

Configurações em execução

 

Tipos Resource

Esta extensão não possui nenhum tipo resource.

 

Constantes pré-definidas

As contantes abaixo são definidas por esta extensão e somente estarão disponíveis quando a extensão foi compilada com o PHP ou carregada dinamicamente durante a execução.

 

FRIBIDI_CHARSET_UTF8 (integer)

Unicode

FRIBIDI_CHARSET_8859_6 (integer)

Arabic

FRIBIDI_CHARSET_8859_8 (integer)

Hebrew

FRIBIDI_CHARSET_CP1255 (integer)

Hebrew/Yiddish

FRIBIDI_CHARSET_CP1256 (integer)

Arabic

FRIBIDI_CHARSET_ISIRI_3342 (integer)

Persian

FRIBIDI_CHARSET_CAP_RTL (integer)

Usado para fim de teste, irá tratar CAPS como letras não Inglesas

FRIBIDI_RTL (integer)

Direita para esquerda

FRIBIDI_LTR (integer)

Esquerda para direita

FRIBIDI_AUTO (integer)

Autodetecta a direção base.

Índice

fribidi_log2vis — Converte uma string lógica para uma visual

 

--------------------------------------------------------------------------------

Anterior Acima Próxima

PDO_FIREBIRD DSN Principal fribidi_log2vis

";

 

$s = new Seguranca("chave", true);// A chave é... "chave" e é pra compactar

echo $s->encriptar($MSG);

?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vlw pra todo mundo aew...

Cada um colaborou bastante com o desenvolvimento da classe...

 

eu vou ficar usando a essa classe:

<?php
##
# Classe de encriptação de dados com chave
# Estas funções impossibilitam o acesso aos texto sem a chave
# 
# Criado por: (Membros iMasters)
#	- Fredericomf
#	- Dórian Conde Langbeck
#	- Wanderson Regis Silva
##
class fusion_crypt {
	private $chave, $compactar;
	function __construct($chave, $compactar = false) {
		$sinal = false;
		foreach(str_split(md5($texto)) as $char) {
			if($sinal = !$sinal) $this->chave -= ord($char);
			else $this->chave += ord($char);
		}
		if($this->chave < 0) $this->chave *= -1;
		$this->compactar = $compactar;
	}
	
	function encriptar($texto) {
		if($this->compactar) $texto = gzdeflate($texto, 9);
		foreach(str_split($texto) as $char) $final[] = sprintf("%03x", ord($char) + $this->chave);
		return join("",$final);
	}
	
	function decriptar($texto) {
		foreach(str_split($texto, 3) as $char) $final[] = chr(hexdec($char) - $this->chave);
		return $this->compactar ? gzinflate(join("",$final)) : join("",$final);
	}
}
?>

Acho q naum da pra melhorar + que isso ^^

 

PS: Peço q naum liguem para a falta de criatividade do nome da classe xD

Compartilhar este post


Link para o post
Compartilhar em outros sites

Um modo de fazer criptografia MD5 bidirecional =D

 

Contras:

- Se o texto tiver "x13" em algum lugar da tilt

- Retorna um valor base64, o que da tilt algumas vezes quando usado na URI

 

http://www.vivaolinux.com.br/artigos/verAr...21&pagina=3

 

Eu mechi nas funções pra resolver esses problemas, mas ainda tenho q testar pra ver se deu t+

Compartilhar este post


Link para o post
Compartilhar em outros sites
  narizgudo disse:

Um modo de fazer criptografia MD5 bidirecional =D

 

Contras:

- Se o texto tiver "x13" em algum lugar da tilt

- Retorna um valor base64, o que da tilt algumas vezes quando usado na URI

 

http://www.vivaolinux.com.br/artigos/verAr...21&pagina=3

 

Eu mechi nas funções pra resolver esses problemas, mas ainda tenho q testar pra ver se deu t+

tentei implementar o metodo q você indicou, + obtive muitos resultados inconsistentes semelhantes ao descrito pelo danilow no penultimo post, isso inviabilizou o uso da função no meu sistema, aconselho outras pessoas q pretendem implementar o script em seus sistemas, a tralizar testes com chaves comuns com as qual o seu sistema vai trabalhar.

você disse q estava realizando umas alterações no codigo, se você conseguir consertar as falhas existentes atualmente, poste aqui, vai ME ajudar bastante e certamente outras pessoas necessitadas ^^

 

PS: Atualmente estou usando a "fusion_crypt" msm, como a saida gerada é apenas alfanuméria, naum estou tendo problemas ao passa-las pela URL msm, vcs podem ate afirmar q a do cara funciona pela URL msm, + pra quem usa urlrewrite, vai ter alguns problemas, principalmente com a possivel existencia de "/" no texto criptografado....

 

abraços....

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.