Security : crypter class….the easy way

In this article I will explain how to create a PHP Class that will encrypt and decrypt any data with a given password. It is object programmed and uses existing PHP algorithms.

Excerpt :

Think about what we might need a class like this for? We want to encrypt important data with a password for security reasons. We also want, as already mentioned, to be able to decrypt that data when necessary. Why should you use symmetric algorithms? It’s easy; when you’re offering a password sent via email or something like that, you need the password to be sent in plaintext. The hash algorithms are not reversible. Once you have hashed a string you can’t decipher the original text from the hash.

Source : here

Learning cURL

cURL is a tool for transferring files and data with URL syntax, supporting many protocols including HTTP, FTP, TELNET and more. Initially, cURL was designed to be a command line tool. Lucky for us, the cURL library is also supported by PHP. In this article, we will look at some of the advanced features of cURL, and how we can use them in our PHP scripts.

Source : here

cURL , PHP si SSL

La un moment dat am avut nevoie de a accesa un serviciu ssl din php folosind cURL. NU intentionam sa folosesc cURL, dar asta folosea PEAR : SOAP. Dupa mai mutle incercari, gaseam eroarea de ssl, de certificat invalid.

Rezolvarea e una simpla : Dezactivam din cURL verificarea PEER (CURLOPT_SSL_VERIFYPEER), insa nu e elegant.
Metoda eleganta presupune insa, salvarea certificatului si trimiterea lui in requestul cURL.

Trimiterea se face astfel :

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
curl_setopt($ch, CURLOPT_CAINFO, 'fisierul in care se tine certificatul salvat in format PEM');

Fisierul trebuie sa fie salvat in format X.509 Certificate (PEM). Asta se paote face din browser, la view certificate/export.

Ce facem insa cand aplicatia ruleaza si se depaseste expire date ?
Folosind functiile php stream, putem accesa certificatul. Cu ajutorul extensiei openssl il putem salva.


$url = 'url'; //url-ul care necesita certificatul ,fara protocol.
$context = stream_context_create();
$res = stream_context_set_option($context, 'ssl', 'capture_peer_cert', true);
$res = stream_context_set_option($context, 'ssl', 'verify_host', true);
if ($socket = stream_socket_client("tls://$url:443/", $errno, $errstr, 30, STREAM_CLIENT_CONNECT, $context))
{
    if ($options = stream_context_get_options($context))
    {
      if ( isset ($options['ssl']) && isset ($options['ssl']['peer_certificate']))
      {
        $keyinfo = openssl_x509_export_to_file($options['ssl']['peer_certificate'], 'file to save to');
      }
    }
}

Data de expirare a certificatului curent se poate lua astfel :

$keyinfo = openssl_x509_parse(file_get_contents($filename));
var_dump($keyinfo['validTo']);

Data este in format YYMMDDHHMMSS.

Spor la conectare SSL.

Watermark pe imagini in php

Va propun o metoda de a pune un watermark pe o imagine in PHP. In principiu functia primeste ca parametrii imaginea sursa (locatie), locatia destinatie, watermarkul (locatie imagine), si calitatea jpeg.

Va returna Boolean, iar in cazul TRUE va salva un jpeg cu watermark din imaginea initiala. Functia se foloseste de libraria GD inclusa in php si accepta orice fel de tip de imagine pe care o poate recunoaste aceasta.

Watermarkul este pus in coltul din dreapta jos, dar asta se paote modifica dupa bunul plac.

function set_watermark($source, $dest, $watermark, $quality = 80)
{
  if (func_num_args() < 3)
  {
    $set_watermark_error = "Insufficient parameters supplied!";
  }
  else
  {
    if (file_exists($source))
    {
      if ($src = imagecreatefromstring(file_get_contents($source)))
      {
        $info = getimagesize($source);
        imageantialias($src, true);
        if ($wm = imagecreatefromstring(file_get_contents($watermark)))
        {
          $wm_info = getimagesize($watermark);
          imagealphablending($src, true);
          imagecopy($src, $wm, $info[0]-$wm_info[0]-5, $info[1]-$wm_info[1]-5, 0, 0, $wm_info[0], $wm_info[1]);
          if (imagejpeg($src, $dest, $quality))
          {
            if (file_exists($dest))
            {
              chmod($dest, 0777);
              return true;
            }
            else
            {
              $set_watermark_error = 'Unable tosaveimage! ';
            }
          }
          else
          {
            $set_watermark_error = 'Unable tosaveimage! ';
          }
        }
      }
      else
      {
        $set_watermark_error = 'Unrecognized imageformat! ';
      }
    }
    else
    {
      $set_watermark_error = 'Source filedoesnotexist! ';
    }
  }
  return false;
}

Functia mai poate fi customizata pentru a intoarce si alte tipuri de imagine, dar lasam asta la alegerea fiecaruia.

Extragere date din cnp (php)

Va propun un cod de extragere de date specifice dintr-un CNP (13 cifre). Aceste date ar putea fi sex, an,luna,zi, data nasterii,judet,nr si crc.

function cnp_extract($cnp, $extract_type)
{
  if (strlen($cnp) == 13)
  {
    $sex = $cnp[0];
    $bd = substr($cnp, 1, 6);
    if ($sex == 1 || $sex == 2) { $sy = 19; }
    elseif ($sex == 3 || $sex == 4) { $sy = 18; }
    elseif ($sex == 5 || $sex == 6) { $sy = 20; }
    $year = $sy.$bd[0].$bd[1];
    $month = $bd[2].$bd[3];
    $day = $bd[4].$bd[5];
    $birthday = strtotime("$year-$month-$day");
    $judet = $cnp[7].$cnp[8];
    $nr = $cnp[9].$cnp[10].$cnp[11];
    $crc = $cnp[12];
    if(isset($$extract_type)
    {
      return $$extract_type;
    }
    else
    {
      return false;
    }
  }
  else
  {
    return false;
  }
}

Astfel callul : cnp_extract($cnp, 'birthday') va intoarce data nasterii.

pentru marketing manageri… si sales manageri

.. sau chiar pentru plannerii din agentii, de citit si retinut:

– un studiu Nielsen despre impactul retelelor sociale: context, audienta, cum le poti folosi ca advertiser etc – pdf
– un white paper despre ce inseamna social media: tooluri, beneficiul comunicarii pe social media, cine si cum etc – pdf
– 5 pasi concreti pentru a aborda marketingul pe social media – link.

10x 2 Novac

un nou joc nou

Hello

azi declar terminata versiunea 1 al jocului la care lucrez de 2-3 saptamani.
jocul este o reproducere al vechiului joc de tenis care se juca pe televizor.
acesta este postat pe internet si se va putea juca din browser cu pluginul de java instalat accesand adresa: http://demo.stimasoft.com/games_en/pingpong/
rezolutia jocului este de 1000×700 pixeli.

jocul incepe in modul demo, adica calculatorul se joaca singur, iar scorul este unul aleatoriu, si este afisat pe mijloc sus intr-un stil “ransom note”.
pentru a incepe jocul se apasa pe butonul verde “pornire” din stanga jos.
scorul se reseteaza la 00-00.
scorul incepe sa functioneze si tine pana la 99.
jucatorul primeste controlul paletei din stanga pe care o poate misca prin miscari ale mouseului.
calculatorul are controlul paletei din dreapta si in versiunea curenta sunt sanse de aproximativ 1/3 ca acesta sa nu nimereasca mingea, caz in care scorul se schimba in favoarea jucatorului.
pentru oprirea jocului si intoarcerea in modul demo se apasa butonul rosu “oprire” din stanga jos.

planuri pentru versiunea 2:
– sa poti modifica viteza jocului; (easy)
– unghiul cu care mingea zboara din paleta va fi calculat complex: in prezent unghiul este calculat in functie de locul unde mingea loveste paleta, in viitor va tine cont si de unghiul cu care vine mingea si de un mic unghi aleator, de aproximativ 0-5 grade; (normal)
– paletele cu care joaca calculatorul sa fie animate, sa se miste pe ecran; (hard)
– mai multe modele de design ale paletelor cu care joaca calculatorul;
– sa poti juca prin internet cu cineva de pe alt calculator. (very hard)

Radu.