Tipo de criptografia na classe do Joomla JUserHelper::getCryptedPassword
20 de Abril de 2011, 0:00 - sem comentários ainda<?php
/**
/* @author Jonatan Villela
/* @copyright 2011
*/
/////// Este Script é válido para as versões 1.5.x, 1.7.x e 2.5
/** Texto a ser criptografado
* */
$Password_reversion = 'minhasenha';
/////////////////
/**
* O Salt manda muito na força da senha entao lembre-se sempre do salt mais nao deixe muito grande
* quanto maior o salt maior o processamento do processador do servidor para gerar sequencias
*
* */
$salt = JUserHelper::genRandomPassword();
$salt64char = JUserHelper::genRandomPassword('64');
/** Examples of password strength
* tipos de criptografias aceitos na função getCryptedPassword
*
*plain
*sha
*crypt
*crypt-des
*crypt-md5
*crypt-blowfish
*md5-base64
*ssha
*smd5
*aprmd5
*/
$cryptmd5hex = JUserHelper::getCryptedPassword($Password_reversion, $salt, 'md5-hex');
/**
* Criando uma sequencia com salt maior
* */
$cryptmd5hex64char = JUserHelper::getCryptedPassword($Password_reversion, $salt64char, 'md5-hex');
$cryptsha = JUserHelper::getCryptedPassword($Password_reversion, $salt, 'sha');
$cryptcrypt= JUserHelper::getCryptedPassword($Password_reversion, $salt, 'crypt');
$cryptcryptdes= JUserHelper::getCryptedPassword($Password_reversion, $salt, 'crypt-des');
$cryptcryptmd5 = JUserHelper::getCryptedPassword($Password_reversion, $salt, 'crypt-md5');
$cryptcryptblowfish = JUserHelper::getCryptedPassword($Password_reversion, $salt, 'crypt-blowfish');
$cryptmd5base64 = JUserHelper::getCryptedPassword($Password_reversion, $salt, 'md5-base64');
$cryptssha = JUserHelper::getCryptedPassword($Password_reversion, $salt, 'ssha');
$cryptsmd5 = JUserHelper::getCryptedPassword($Password_reversion, $salt, 'smd5');
$cryptaprmd5 = JUserHelper::getCryptedPassword($Password_reversion, $salt, 'aprmd5');
$termino_md5hex = $cryptmd5hex.':'.$salt;
$termino_md5hex64char = $cryptmd5hex64char.':'.$salt64char;
$termino_sha = $cryptsha.':'.$salt;
$termino_crypt = $cryptcrypt.':'.$salt;
$termino_cryptdes = $cryptcryptdes.':'.$salt;
$termino_cryptmd5 = $cryptcryptmd5.':'.$salt;
$termino_cryptblowfish = $cryptcryptblowfish.':'.$salt;
$termino_cryptmd5base64 = $cryptmd5base64.':'.$salt;
$termino_cryptssha = $cryptssha.':'.$salt;
$termino_cryptsmd5 = $cryptsmd5.':'.$salt;
$termino_cryptaprmd5 = $cryptaprmd5.':'.$salt;
echo "md5-hex: " . $termino_md5hex . "<br /><br />";
echo "md5-hex com salt 64 caracteres: " . $termino_md5hex64char . "<br /><br />";
echo "Sha: " . $termino_sha . "<br /><br />";
echo "Crypt: " . $termino_crypt . "<br /><br />";
echo "crypt-des: " . $termino_cryptdes . "<br /><br />";
echo "crypt-md5: " . $termino_cryptmd5 . "<br /><br />";
echo "crypt-blowfish: " . $termino_cryptblowfish . "<br /><br />";
echo "md5-base64: " . $termino_cryptmd5base64 . "<br /><br />";
echo "ssha: " . $termino_cryptssha . "<br /><br />";
echo "smd5: " . $termino_cryptsmd5 . "<br /><br />";
echo "aprmd5: " . $termino_cryptaprmd5 . "<br /><br />";
Tipos de criptografias gerados na função getCryptedPassword
com salt padrão
md5-hex: bc607542df6c9a61bcb1c66828f94e4a:h5ZFxohk
com salt de 64 caracteres
md5-hex com salt 64 caracteres: 0078d963209e0b9896d5d66159efeb44:cuMdfBKlYkzm9U4RyMxb1Px8wwnGVhi1FUUmdE770b3q66s3KXpZdwNo2Kz7eiIf
Sha: k9UfUvvf4elE8IRyffJJk+iMruc=:h5ZFxohk
Crypt: h5QnWQkFO1d5.:h5ZFxohk
crypt-des: h5QnWQkFO1d5.:h5ZFxohk
crypt-md5: h5QnWQkFO1d5.:h5ZFxohk
crypt-blowfish: h5QnWQkFO1d5.:h5ZFxohk
md5-base64: fGfnE6S0E5cC3hpPrGcjRA==:h5ZFxohk
ssha: NTzs8OsXRmeke3XirIhvXqG74V1oNVpGeG9oaw==:h5ZFxohk
smd5: vGB1Qt9smmG8scZoKPlOSmg1WkZ4b2hr:h5ZFxohk
aprmd5: $apr1$h5ZFxohk$d4sLbbYJSYlnARc4PFMV/0:h5ZFxohk
?>
Desenhando Tokem para sistema de identificação.
15 de Março de 2011, 0:00 - sem comentários ainda
//// Sistema de Tokem:::
/*
O inicioo do pensamento
Fiscalizar o funcionamento dos sistemas desenvolvidos por onde andam e se houve cópias para outros pcs.
Lembrando que essa tokem é para Desenvolvimento e plataforma windows.
No caso de Linux ai precisamos icrementar acoplando certificação digital por ssh
Se alguém tiver alguma outra solução de identificar o Linux postem vai ser bom pra gente.
Variáveis de Identificação
00 ID Sequencial para identificação por usuário
01 Identificação digital do Windows pode ser acoplado junto a serial do mesmo
02 Número de serial do HD que contem o Windows ou sua instalação
-------------------------------------
Variáveis de Rastreamento do software
03 Nome do Pc na Rede
04 Usuario Corrente do sistema operacional
05 Si o usuário corrente é administrador
06 Ip Local da conexão ou da rede local
07 Ip do Proxy de acesso a internet
08 Mac da placa de rede da conexão da internet (tambem pode ser uma variável de identificação estática)
criando o Tokem
O Tokem é uma marca ou identificação que é unico para cada usuário, entao sendo assim todas as 9 variáveis descritas acima
estão juntas sendo elas separadas por um delimitardar para enventuamente vc distribuir ela através de uma Array.
variavel com delimitador = "|^|"
Desenho do Tokem - Desenhado por Jonatan Villela
Gerando Password Joomla salt e crypt
19 de Janeiro de 2010, 0:00 - 5 comentáriosNeste caso aqui está a classe responsavel por gerar as senhas de nome de usuarios que vão na tabela do banco de dados do joomla, responsavél por encriptar o mesmo;
Exemplo de uma sequencia.
338359e2aecb480f7288239d331393be:UyoXsWKg4vTcSq5qXdIMfrAM3mk0vd6L
/**
* @author Jonatan Villela
* @copyright 2010
*/
class JUserHelper
{
/**
* Method to activate a user
*
* @param string $activation Activation string
* @return boolean True on success
* @since 1.5
*/
function activateUser($activation)
{
//Initialize some variables
$db = & JFactory::getDBO();
// Lets get the id of the user we want to activate
$query = 'SELECT id'
. ' FROM #__users'
. ' WHERE activation = '.$db->Quote($activation)
. ' AND block = 1'
. ' AND lastvisitDate = '.$db->Quote('0000-00-00 00:00:00');
;
$db->setQuery( $query );
$id = intval( $db->loadResult() );
// Is it a valid user to activate?
if ($id)
{
$user =& JUser::getInstance( (int) $id );
$user->set('block', '0');
$user->set('activation', '');
// Time to take care of business.... store the user.
if (!$user->save())
{
JError::raiseWarning( "SOME_ERROR_CODE", $user->getError() );
return false;
}
}
else
{
JError::raiseWarning( "SOME_ERROR_CODE", JText::_('UNABLE TO FIND A USER WITH GIVEN ACTIVATION STRING') );
return false;
}
return true;
}
/**
* Returns userid if a user exists
*
* @param string The username to search on
* @return int The user id or 0 if not found
*/
function getUserId($username)
{
// Initialize some variables
$db = & JFactory::getDBO();
$query = 'SELECT id FROM #__users WHERE username = ' . $db->Quote( $username );
$db->setQuery($query, 0, 1);
return $db->loadResult();
}
/**
* Formats a password using the current encryption.
*
* @access public
* @param string $plaintext The plaintext password to encrypt.
* @param string $salt The salt to use to encrypt the password. []
* If not present, a new salt will be
* generated.
* @param string $encryption The kind of pasword encryption to use.
* Defaults to md5-hex.
* @param boolean $show_encrypt Some password systems prepend the kind of
* encryption to the crypted password ({SHA},
* etc). Defaults to false.
*
* @return string The encrypted password.
*/
function getCryptedPassword($plaintext, $salt = '', $encryption = 'md5-hex', $show_encrypt = false)
{
// Get the salt to use.
$salt = JUserHelper::getSalt($encryption, $salt, $plaintext);
// Encrypt the password.
switch ($encryption)
{
case 'plain' :
return $plaintext;
case 'sha' :
$encrypted = base64_encode(mhash(MHASH_SHA1, $plaintext));
return ($show_encrypt) ? '{SHA}'.$encrypted : $encrypted;
case 'crypt' :
case 'crypt-des' :
case 'crypt-md5' :
case 'crypt-blowfish' :
return ($show_encrypt ? '{crypt}' : '').crypt($plaintext, $salt);
case 'md5-base64' :
$encrypted = base64_encode(mhash(MHASH_MD5, $plaintext));
return ($show_encrypt) ? '{MD5}'.$encrypted : $encrypted;
case 'ssha' :
$encrypted = base64_encode(mhash(MHASH_SHA1, $plaintext.$salt).$salt);
return ($show_encrypt) ? '{SSHA}'.$encrypted : $encrypted;
case 'smd5' :
$encrypted = base64_encode(mhash(MHASH_MD5, $plaintext.$salt).$salt);
return ($show_encrypt) ? '{SMD5}'.$encrypted : $encrypted;
case 'aprmd5' :
$length = strlen($plaintext);
$context = $plaintext.'$apr1$'.$salt;
$binary = JUserHelper::_bin(md5($plaintext.$salt.$plaintext));
for ($i = $length; $i > 0; $i -= 16) {
$context .= substr($binary, 0, ($i > 16 ? 16 : $i));
}
for ($i = $length; $i > 0; $i >>= 1) {
$context .= ($i & 1) ? chr(0) : $plaintext[0];
}
$binary = JUserHelper::_bin(md5($context));
for ($i = 0; $i < 1000; $i ++) {
$new = ($i & 1) ? $plaintext : substr($binary, 0, 16);
if ($i % 3) {
$new .= $salt;
}
if ($i % 7) {
$new .= $plaintext;
}
$new .= ($i & 1) ? substr($binary, 0, 16) : $plaintext;
$binary = JUserHelper::_bin(md5($new));
}
$p = array ();
for ($i = 0; $i < 5; $i ++) {
$k = $i +6;
$j = $i +12;
if ($j == 16) {
$j = 5;
}
$p[] = JUserHelper::_toAPRMD5((ord($binary[$i]) << 16) | (ord($binary[$k]) << 8) | (ord($binary[$j])), 5);
}
return '$apr1$'.$salt.'$'.implode('', $p).JUserHelper::_toAPRMD5(ord($binary[11]), 3);
case 'md5-hex' :
default :
$encrypted = ($salt) ? md5($plaintext.$salt) : md5($plaintext);
return ($show_encrypt) ? '{MD5}'.$encrypted : $encrypted;
}
}
/**
* Returns a salt for the appropriate kind of password encryption.
* Optionally takes a seed and a plaintext password, to extract the seed
* of an existing password, or for encryption types that use the plaintext
* in the generation of the salt.
*
* @access public
* @param string $encryption The kind of pasword encryption to use.
* Defaults to md5-hex.
* @param string $seed The seed to get the salt from (probably a
* previously generated password). Defaults to
* generating a new seed.
* @param string $plaintext The plaintext password that we're generating
* a salt for. Defaults to none.
*
* @return string The generated or extracted salt.
*/
function getSalt($encryption = 'md5-hex', $seed = '', $plaintext = '')
{
// Encrypt the password.
switch ($encryption)
{
case 'crypt' :
case 'crypt-des' :
if ($seed) {
return substr(preg_replace('|^{crypt}|i', '', $seed), 0, 2);
} else {
return substr(md5(mt_rand()), 0, 2);
}
break;
case 'crypt-md5' :
if ($seed) {
return substr(preg_replace('|^{crypt}|i', '', $seed), 0, 12);
} else {
return '$1$'.substr(md5(mt_rand()), 0, 8).'$';
}
break;
case 'crypt-blowfish' :
if ($seed) {
return substr(preg_replace('|^{crypt}|i', '', $seed), 0, 16);
} else {
return '$2$'.substr(md5(mt_rand()), 0, 12).'$';
}
break;
case 'ssha' :
if ($seed) {
return substr(preg_replace('|^{SSHA}|', '', $seed), -20);
} else {
return mhash_keygen_s2k(MHASH_SHA1, $plaintext, substr(pack('h*', md5(mt_rand())), 0, 8), 4);
}
break;
case 'smd5' :
if ($seed) {
return substr(preg_replace('|^{SMD5}|', '', $seed), -16);
} else {
return mhash_keygen_s2k(MHASH_MD5, $plaintext, substr(pack('h*', md5(mt_rand())), 0, 8), 4);
}
break;
case 'aprmd5' :
/* 64 characters that are valid for APRMD5 passwords. */
$APRMD5 = './0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';
if ($seed) {
return substr(preg_replace('/^\$apr1\$(.{8}).*/', '\\1', $seed), 0, 8);
} else {
$salt = '';
for ($i = 0; $i < 8; $i ++) {
$salt .= $APRMD5 {
rand(0, 63)
};
}
return $salt;
}
break;
default :
$salt = '';
if ($seed) {
$salt = $seed;
}
return $salt;
break;
}
}
/**
* Generate a random password
*
* @static
* @param int $length Length of the password to generate
* @return string Random Password
* @since 1.5
*/
function genRandomPassword($length = 8)
{
$salt = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
$len = strlen($salt);
$makepass = '';
$stat = @stat(__FILE__);
if(empty($stat) || !is_array($stat)) $stat = array(php_uname());
mt_srand(crc32(microtime() . implode('|', $stat)));
for ($i = 0; $i < $length; $i ++) {
$makepass .= $salt[mt_rand(0, $len -1)];
}
return $makepass;
}
/**
* Converts to allowed 64 characters for APRMD5 passwords.
*
* @access private
* @param string $value
* @param integer $count
* @return string $value converted to the 64 MD5 characters.
* @since 1.5
*/
function _toAPRMD5($value, $count)
{
/* 64 characters that are valid for APRMD5 passwords. */
$APRMD5 = './0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';
$aprmd5 = '';
$count = abs($count);
while (-- $count) {
$aprmd5 .= $APRMD5[$value & 0x3f];
$value >>= 6;
}
return $aprmd5;
}
/**
* Converts hexadecimal string to binary data.
*
* @access private
* @param string $hex Hex data.
* @return string Binary data.
* @since 1.5
*/
function _bin($hex)
{
$bin = '';
$length = strlen($hex);
for ($i = 0; $i < $length; $i += 2) {
$tmp = sscanf(substr($hex, $i, 2), '%x');
$bin .= chr(array_shift($tmp));
}
return $bin;
}
}
?>
MUTANTE RIJNDAEL, COM VALIDAÇÃO E EXPIRAÇÃO
18 de Outubro de 2009, 0:00 - sem comentários aindawww.jntd.info
Ola pessoal aqui vai uma mão na roda pra qem precisa de segurança em requisições via GET ou POST no seu PHP....
DESCRIÇÃO,,,, Este código lhe permite encriptar seus dados de uma forma segura com identificação por maquina e tempo de expiração, em uma forma mutante ou seja a mesma coisa gera sempre um sequencia diferente......
A questão da validação por maquina, se refere que cada dado encriptado pelo mutante leva em conta o seu ip, ip reverso e browser da maquina. Sendo só sera possível descriptografar a sequencia o computador idêntico ao que criptgrafou a sequencia.
A questão de expiração da sequencia: na função Dmut($var1, $var2) a variavel $var2 para teterminar a sua função os segundos de expiração, 60 = 1m
Forma de Uso: este script e baseado em duas funções, a Emut("$VAR1", $VAR2); que se encarregara de encriptar seu dado, sendo que para $VAR1 para os dados a serem validado e a $VAR2 para com o valor 1 ou 0, 1 para validação por maquina. E a Dmut($VAR1, $VAR2); nesta função se encarregará de interpretar a sua sequencia e desmenbra-la, sendo a variavel $VAR1 para sua sequencia encriptade e a variavel $VAR2 para determinar o periodo de expiração
o mutante e baseado em um arquivo somente que no caso é o request_mutex.php.
//////////////////////////////////////////////////////
Arquivo requert_mutex.php:
//////////////////////////////////////////////////////
<?php
/**
* @author Jonatan Villela
* @copyright 2009
*/
defined( '_JONATAN_' ) or die( '
-->
Acesso Restrito Jonatan Villela - Encryption System; jonatan.villela@gmail.com
jonatandesign.com
' );
////////////////////////////////////////////////////////////////////////////////////////////////
/////// configuração do mutante//////////////////////////////////////////////////////////////////////////////////////
// senha padrao
$senha_privada_3 = '123456';
// CONFIG Gerador de Senhas de predestinação
/// nunca use as mesmas senha que estão neste tutorial
$GEN_PRE_A = Array( 'v','e','W','4','3','L','g','q','C','i','1','b' );
$GEN_PRE_B = Array( 'o','6','q','e','s','m','n','4','t','w','a','J' );
$GEN_PRE_C = Array( 'g','k','x','t','u','f','1','6','q','V','Q','K' );
$GEN_PRE_D = Array( 'Q','V','F','Z','f','g','7','1','3','o','e','R' );
// Forca da Predestinação com 12 Chars
//configuração do php: memory_limit = 256M || 1024 || 2048
// 4 = 256M; 5 = 1024; 6 = 2048M; para media
//
// 4 = 11880 presenhas // 5 = 95040 // 6 = 665280 // 7 = timer out em 50s com 2048M
//
$force_PRE_IN = 4;
//////////////////////////////// fim da configuração /////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////
class CB {
var $__loop;
var $__returnedValue;
var $__limit;
var $__matches;
var $__sep;
var $__delsep;
var $__C;
function Combinatory( $__sep = '' ) {
if( $__sep == '' ) {
$this->__sep = md5( microtime() );
$this->__delsep = true;
}
else {
$this->__sep = &$__sep;
$this->__delsep = false;
}
}
function result( $container, $match, $type ) {
$this->__loop = '';
$this->__returnedValue = '';
$this->__limit = count( $container );
$this->__matches = Array();
$this->__C = Array();
if( $match < 2 || $this->__limit < $match ) {
return Array( 'This is not a good idea, please change elements or $match value .' );
}
switch( $type ) {
case 'Pn':
return $this->__checkReturn( $this->__combinatory_Pn( $container, $match ) );
case 'Pn(k)':
return $this->__checkReturn( $this->__combinatory_P1n( $container, $match ) );
case 'Dn,k':
return $this->__checkReturn( $this->__sort( $this->__combinatory_Pn( $container, $match ) ) );
case 'D\'n,k':
return $this->__checkReturn( $this->__sort( $this->__combinatory_P1n( $container, $match ) ) );
case 'Cn,k':
return $this->__checkReturn( $this->__combinatory_C( $container, $match, '__combinatory_Pn' ) );
case 'C\'n,k':
return $this->__checkReturn( $this->__combinatory_C( $container, $match, '__combinatory_P1n' ) );
default:
return Array( '$type error: options are "Pn" or "Pn(k)" or "Dn,k" or "D\'n,k" or "Cn,k" or "C\'n,k" .' );
}
}
function __checkReturn( $container ) {
if( $this->__delsep === true ) {
return str_replace( $this->__sep, '', $container );
}
else {
return $container;
}
}
function __combinatory_P1n( &$container, $match ) {
$this->__commonEvaluation( $match );
return $this->__codeCreator( $container );
}
function __combinatory_Pn( &$container, &$match ) {
$__possibilities = 'if( ';
for( $a = 1; $a < $match; $a++ ) {
for( $b = ($match-1); $b >= 0; $b-- ) {
if( $a !== $b ) {
$__possibilities .= '$_'.$a.' !== $_'.$b.' && ';
}
}
}
$__possibilities = substr( $__possibilities, 0, -3 );
$this->__commonEvaluation( $match, $__possibilities.') { ', ' }' );
return $this->__codeCreator( $container );
}
function __combinatory_C( &$container, &$match, $method ) {
eval( '$cAr = $this->'.$method.'( $container, $match );' );
$nAr = Array();
for( $a = 0, $b = count( $cAr ); $a < $b; $a++ ) {
$fAr = $this->__sort( $fAr = explode( $this->__sep, $cAr[$a] ) );
if( in_Array( $fAr, $this->__C ) == false ) {
array_push( $this->__C, $fAr );
array_push( $nAr, $cAr[$a] );
}
}
return $nAr;
}
function __codeCreator( &$container ) {
eval( $this->__loop );
return $this->__matches;
}
function __commonEvaluation( &$match, $pre = '', $post = '' ) {
for( $a = 0; $a < $match; $a++ ) {
$this->__loop .= 'for( $_'.$a.' = 0; $_'.$a.' < '.$this->__limit.'; $_'.$a.'++ ) { ';
$this->__returnedValue .= '$container[$_'.$a.'].\''.$this->__sep.'\'.';
}
$rm = -( strlen( $this->__sep ) + 4 );
$this->__loop .= $pre.'array_push( $this->__matches, '.substr( $this->__returnedValue, 0, $rm ).' );'.$post;
for( $a = 0; $a < $match; $a++ ) {
$this->__loop .= ' }';
}
}
function __sort( $container ) {
sort( $container );
reset( $container );
return $container;
}
}
function genRandomPassword($length = 8)
{
$salt = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
$len = strlen($salt);
$makepass = '';
$stat = @stat(__FILE__);
if(empty($stat) || !is_array($stat)) $stat = array(php_uname());
mt_srand(crc32(microtime() . implode('|', $stat)));
for ($i = 0; $i < $length; $i ++) {
$makepass .= $salt[mt_rand(0, $len -1)];
}
return $makepass;
}
// START DA FUNÇÃO PRINCIPAL ENCRIPT DO MUTANTE :: Emut////////////////////////////////////////////////////////////////////////////////////
// START DA FUNÇÃO PRINCIPAL ENCRIPT DO MUTANTE :: Emut////////////////////////////////////////////////////////////////////////////////////
function Emut($dado_privado, $valid){
if(!isset($valid)){
$valid = 1;
}
function mc_encrypt($encrypt, $mc_key) {
$iv = mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_ECB), MCRYPT_RAND);
$passcrypt = trim(mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $mc_key, trim($encrypt), MCRYPT_MODE_ECB, $iv));
$encode = bin2hex($passcrypt);
return $encode;
}
// Decrypt Function
////////////////////////////////////// PRODUÇÃO MULTANTE RIJNDAEL ecb - JDW 128 * 3
////predefinição de senhas.... 3
// senhas de no maximo 32 caracteres
//echo genRandomPassword(2);
$CB_1 = rand(10,99) .rand(10,99);
$CB_2 = rand(10,99) .rand(10,99);
$CB_3 = rand(10,99) .rand(10,99);
$CB_4 = rand(10,99) .rand(10,99);
$CB_5 = rand(10,99) .rand(10,99);
$CB_6 = rand(10,99) .rand(10,99);
$CB_7 = rand(10,99) .rand(10,99);
$CB_8 = rand(10,99) .rand(10,99);
//echo $CB_1 . '
';
//echo $CB_2 . '
';
//echo $CB_3 . '
';
//echo $CB_4 . '
';
$container_1 = $GEN_PRE_A;
$a = &new CB(''); // note that separator('-') is optional
$matches_1 = &$a->result( $container_1, $force_PRE_IN, "Pn" ); // 2 is the class or combination possibility, Pn is the method
//11 caracteres = 7920 combinações // 12 = 11880
//echo $matches_1[$CB_1] . '
';
$container_2 = $GEN_PRE_B;
$b = &new CB(''); // note that separator('-') is optional
$matches_2 = &$b->result( $container_2, $force_PRE_IN, "Pn" ); // 2 is the class or combination possibility, Pn is the method
//echo $matches_2[$CB_2] . '
';
$container_3 = $GEN_PRE_C;
$c = &new CB(''); // note that separator('-') is optional
$matches_3 = &$c->result( $container_3, $force_PRE_IN, "Pn" ); // 2 is the class or combination possibility, Pn is the method
//echo $matches_3[$CB_3] . '
';
$container_4 = $GEN_PRE_D;
$d = &new CB(''); // note that separator('-') is optional
$matches_4 = &$d->result( $container_4, $force_PRE_IN, "Pn" ); // 2 is the class or combination possibility, Pn is the method
//echo $matches_4[$CB_4] . '
';
$senha_privada_1 = $matches_1[$CB_1].$matches_2[$CB_2].$matches_3[$CB_3].$matches_4[$CB_4];
$senha_privada_2 = $matches_2[$CB_5].$matches_3[$CB_6].$matches_4[$CB_7].$matches_1[$CB_8];
$reverso_primario = $CB_1 . $CB_2 . $CB_3 . $CB_4;
$reverso_secundario = $CB_5 . $CB_6 . $CB_7 . $CB_8;
/////////////////////////////////// parte primaria: senha_1///////
// desc:: predeterminando eXpiração e organizando o mutante
$dt_tempo = time();
// IDENTIFICAÇÃO UNICA ////////////////
// IDENJTIFICAÇÃO UNICA ////////////////
if($valid == 1){
$host = gethostbyaddr($_SERVER['REMOTE_ADDR']);
$servprox = $host;
if(getenv('HTTP_X_FORWARDED_FOR') != ""){
$ip = getenv('HTTP_X_FORWARDED_FOR');}
if(getenv('HTTP_X_FORWARDED_FOR') == ""){
$ip = $_SERVER['REMOTE_ADDR'];}
$os = $_SERVER['HTTP_USER_AGENT'];
// reverso e ip
$chk = md5($reverso_primario . $reverso_secundario . $senha_privada_3 . $dt_tempo . $dado_privado . $ip . $servprox . $os);
}
if($valid == 0){
$chk = md5($reverso_primario . $reverso_secundario . $senha_privada_3 . $dt_tempo . $dado_privado);
}
$corpo_privado_primario = $dt_tempo . '.' . $dado_privado . '.' . $chk . '.' . $valid;
$parte_primaria = mc_encrypt($corpo_privado_primario, $senha_privada_1);
$corpo_privado_secundario = $parte_primaria . '.' . $reverso_primario;
$parte_secundaria = mc_encrypt($corpo_privado_secundario, $senha_privada_2);
$corpo_privado_terciario = $parte_secundaria . '.' . $reverso_secundario;
$parte_terciaria = mc_encrypt($corpo_privado_terciario, $senha_privada_3);
return $parte_terciaria;
}
// START DA FUNÇÃO PRINCIPAL DECRIPT DO MUTANTE :: Dmut////////////////////////////////////////////////////////////////////////////////////
// START DA FUNÇÃO PRINCIPAL DECRIPT DO MUTANTE :: Dmut////////////////////////////////////////////////////////////////////////////////////
function Dmut($dado_privado, $tmp){
function hex2bin($h)
{
if (!is_string($h)) return null;
$r='';
for ($a=0; $a
return $r;
}
// Decrypt Function
function mc_decrypt($decrypt, $mc_key) {
$decoded = hex2bin($decrypt);
$iv = mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_ECB), MCRYPT_RAND);
$decrypted = trim(mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $mc_key, trim($decoded), MCRYPT_MODE_ECB, $iv));
return $decrypted;
}
////////////////////////////////////// PRODUÇÃO MULTANTE RJ ecb - JDW 256
////predefinição de senhas.... 3
// senhas de no maximo 32 caracteres
$container_1 = $GEN_PRE_A;
$a = &new CB(''); // note that separator('-') is optional
$matches_1 = &$a->result( $container_1, $force_PRE_IN, "Pn" ); // 2 is the class or combination possibility, Pn is the method
//11 caracteres = 7920 combinações // 12 = 11880
//echo $matches_1[$CB_1] . '
';
$container_2 = $GEN_PRE_B;
$b = &new CB(''); // note that separator('-') is optional
$matches_2 = &$b->result( $container_2, $force_PRE_IN, "Pn" ); // 2 is the class or combination possibility, Pn is the method
//echo $matches_2[$CB_2] . '
';
$container_3 = $GEN_PRE_C;
$c = &new CB(''); // note that separator('-') is optional
$matches_3 = &$c->result( $container_3, $force_PRE_IN, "Pn" ); // 2 is the class or combination possibility, Pn is the method
//echo $matches_3[$CB_3] . '
';
$container_4 = $GEN_PRE_D;
$d = &new CB(''); // note that separator('-') is optional
$matches_4 = &$d->result( $container_4, $force_PRE_IN, "Pn" ); // 2 is the class or combination possibility, Pn is the method
$descript_parte_1 = mc_decrypt($dado_privado, $senha_privada_3);
$partes_n1 = explode(".", $descript_parte_1);
$partes_n1[0];
$partes_n1[1];
$t1 = substr($partes_n1[1], 0, 4);// . "
"; //
$t2 = substr($partes_n1[1], 4, 4);// . "
"; //
$t3 = substr($partes_n1[1], 8, 4);// . "
"; //
$t4 = substr($partes_n1[1], 12, 4);// . "
"; //
$senha_privada_2 = $matches_2[$t1].$matches_3[$t2].$matches_4[$t3].$matches_1[$t4];
$descript_parte_2 = mc_decrypt($partes_n1[0], $senha_privada_2);
$partes_n2 = explode(".", $descript_parte_2);
$partes_n2[0];
$partes_n2[1];
$t21 = substr($partes_n2[1], 0, 4);// . "
"; //
$t22 = substr($partes_n2[1], 4, 4);// . "
"; //
$t23 = substr($partes_n2[1], 8, 4);// . "
"; //
$t24 = substr($partes_n2[1], 12, 4);// . "
"; //
$senha_privada_1 = $matches_1[$t21].$matches_2[$t22].$matches_3[$t23].$matches_4[$t24];
$descript_parte_1 = mc_decrypt($partes_n2[0], $senha_privada_1);
$partes_n3 = explode(".", $descript_parte_1);
$partes_n3[0]; //tempo pra checar
$partes_n3[1]; // dados recuperados
$partes_n3[2]; // checar hash
$partes_n3[3]; // checagem para levar em conta a validação por ip
if(!isset($tmp)){
$tmp = '150';
}
$tempo_B = $partes_n3[0] + $tmp;
$expira_t = time();
if($partes_n3[3] == 1){
$host = gethostbyaddr($_SERVER['REMOTE_ADDR']);
$servprox = $host;
if(getenv('HTTP_X_FORWARDED_FOR') != ""){
$ip = getenv('HTTP_X_FORWARDED_FOR');}
if(getenv('HTTP_X_FORWARDED_FOR') == ""){
$ip = $_SERVER['REMOTE_ADDR'];}
$os = $_SERVER['HTTP_USER_AGENT'];
/*
echo $ip . "
";
echo $servprox . "
";
echo $os . "
";
*/
$chkR = md5($t21.$t22.$t23.$t24.$t1.$t2.$t3.$t4.$senha_privada_3 . $partes_n3[0] . $partes_n3[1] . $ip . $servprox . $os);
}
if($partes_n3[3] == 0){
$chkR = md5($t21.$t22.$t23.$t24.$t1.$t2.$t3.$t4.$senha_privada_3 . $partes_n3[0] . $partes_n3[1]);
}
if($partes_n3[2] != $chkR){
return "Dados Inválidos.";
}
else if($expira_t > $tempo_B){
return "Dados Inválidos.";
}
else{
return $partes_n3[1];
}
}
?>
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////// Arquivo de USo
//////////////////////////////////////////////////
teste.php
//////////////////////////////////////////////////
define('_JONATAN_', 1);
include('request_mutex.php');
$teste_encript_mutante = Emut('jonatan villela', '1');
$teste_decript_mutante = Dmut($teste_encript_mutante, '300');
echo $teste_encript_mutante . "
";
echo $teste_decript_mutante . "
";
?>
///////////////////////////////////////////////
Checando login JOOMLA 1.5.x externamente
31 de Agosto de 2009, 0:00 - 12 comentáriosPode-se utilizar para um login via ActionScript
JonatanDesign.com
<?php
// Pegar nome de usuário e senha do formulário
$usuario = $_POST['usuario'];
$senha = $_POST['senha'];
// Fazer conexão com o banco de dados
$db = mysql_connect("localhost", "usuarioBD", "senhaBD");
mysql_select_db("baseDeDados", $db);
// Obter senha cifrada do usuário
$sql = "SELECT password FROM jos_users WHERE username='$usuario'";
$resultado = mysql_query($sql);
// Não precisamos mais da conexão, podemos fechar o banco de dados
mysql_close($db);
// Extrair os dados do resultado da query
$pega = mysql_fetch_array($resultado);
$senhaCripto = $pega['password'];
// Separar a senha do sal
if($senhaCripto)
{
$partes = explode( ':', $senhaCripto );
$cripto = $partes[0];
$sal = $partes[1];
// Criar hash com a senha fornecida com o sal (se houver)
$novoHash = ($sal) ? md5($senha.$sal) : md5($senha);
if( $novoHash == $cripto ) {
echo "Acesso autorizado";
} else {
echo "Acesso negado. A senha não confere!";
}
} else {
echo "Este usuário não está cadastrado";
}
?>
Lembrando que a classe gera sempre para a mesma senha uma nova sequencia diferente de todas as que vc já viu na sua vida, sendo assim um tipo de mutante simples.
Exemplo de uso da classe.
$sua_senha = '123456';
$salt = JUserHelper::genRandomPassword(32);
$crypt = JUserHelper::getCryptedPassword($sua_senha, $salt);
$termino_salt = $crypt.':'.$salt;
echo $termino_salt;