Wstęp

Długo zastanawiałem się nad napisaniem tego małego „how to”, ale w końcu doszedłem do wniosku, że warto. Z biegiem czasu komputery stają się coraz szybsze i szybsze… Dlatego osiąganie dużej ilości (biliony na sekundę) hashy podczas tzw. brute-force jest normalnością. Ponadto pojemne dyski (1,2,3 tb) stały się codziennością i w zupełności wystarczają, żeby trzymać na swoim HDD tablice tęczowe (ang. rainbow tables), jest to nic innego jak baza danych, przechowująca zahashowane ciągi znaków (np. md5-1-7-mixedalpha-all-space co znaczy, że tablica zawiera w sobie większość możliwych zakodowanych haseł, które zawierają od 1 do 7 znaków, małe i duże litery alfabetu (mixedalpha), znaki specjalne i spację ). Dodatkowo przy próbie „złamania” zakodowanego hasła może nam pomóc tzw. metoda słownikowa.


Programowanie

W tym tutorialu (w kodzie przykładowego programu) będziemy korzystać z funkcji hashującej md5(), ale bez problemu można zastosować tu kodowanie sha1().


class saltme {

 var $salt = "425324f475743524f6i9089573";//wymyślamy sobie jakąś sól. musi mieć przynajmniej 22 i nie może zawierać znaków specjalnych

 function salter($password) {

 return crypt(md5($password), '$2a$10$'.$this->salt);
 }
}

$salty = new saltme;
 echo $salty->salter('alekot');

Kod PHP jest wyjątkowo prosty i nie ma co go wyjaśniać (:
Wyjaśnię tylko co oznaczają ‚$2$10$’ w funkcji crypt():
$2 – informuję funkcję, że będziemy korzystać z algorytmu blowfish.
$10 – oznacza wykładnik potęgi do, której zostanie podniesiona 2 (10 => 2^10 = 1024)

Operator przypisania

Jak sama nazwa wskazuje operator ten odpowiedzialny jest za przypisanie wartości do zmiennej.

int x, y;
x = 10; // Liczbę 10 przypisujemy zmiennej x
y = x; //zmiennej y przypisujemy wartość x

Należy napomnieć, że wartości przypisywane są ze strony prawej do lewej.


Operatory matematyczne

W C++ możemy dodawać, odejmować, mnożyć, dzielić, itp.

int a, b;
a = 5 ;
b =  a + 10; // + - operator dodawania
b = a - 2; // - - operator odejmowani
b = a / 5; //  / - operator dzielenia
b = a *  5;// * - operator mnożenia
b = a % 5 // % - operator dzielenia modulo ( reszta z dzielenia określona  dla liczb całkowitych )
//w c++ występuję tzw. zapis skrócony
a = a + 5; // jest równe :
a += 5;
a = a - 5; //jest równe:
a -= 5;
a = a * 5; // jest równe
a *= 5 ;
a = a / 5; // jest równe:
a /= 5;

Inkrementacja i dekrementacja

Dla wygody programisty c plus plus przygotował dla nas tytułową inkrementację i dekrementację, które to mogą być post (po) lub pre (przed). Dzięki temu nasz kod staje się czytelniejszy i  wolny od niepotrzebnych linijek. Zastosowanie dekrementacji i inkremetacji jest bardzo proste.

int a = 500;
a++; //do 500 dodajemy 1 i otrzymujemy 501 (metoda post-inkrementacji)
a-- ;// od 500 odejmujemy 1 i otrzymujemy 499 (metoda post-dekrementacji
++a //do 500 dodajemy 1 i otrzymujemy 501 (metoda pre-inkrementacji)
--a ;// od 500 odejmujemy 1 i otrzymujemy 499 (metoda pre-dekrementacji)

Operatory logiczne

Odpowiadają matematycznej koniunkcji (i), alternatywie(lub) i negacji. Zróbmy więc małą powtórkę z liceum i zastanówmy się kiedy koniunkcja jest prawdziwa?

Pamiętasz ? (:

Koniunkcja zwraca prawdziwą wartość tylko wtedy kiedy obydwa argumenty są prawdziwe.

bool x, y, z, a
x = false;
y = true;
a = true;
z = x && y; // w tym wypadku zmienna "z" przyjmie wartość logiczną false, ponieważ jeden z argumentów był nieprawdziwy.
z = a && y; // "z" przyjmie wartość logiczną true.

Teraz czas na alternatywę. Alternatywa przyjmuje wartość logiczną kiedy chociaż jeden z argumentów jest prawdziwy.

bool x, y, z, a;
x = true;
y = false;
a = false;
z = a || x; //zwróci wartość true
z = a || y; //zwróci wartość false

Negacja natomiast neguje wartość logiczną. Operator ! zamienia wartość true na false a false na true.

bool x, y, z;
x = true;
y = false;
z = !x; //zwróci false
z = !y; //zwróci true

Operatory bitowe

Operatory te pozwalają nam na tzw. przesunięcia bitowe, polega ono na tym, że w systemie dwójkowym przesuwamy wszystkie cyfry binarne w lewo lub prawo o n pozycji, a bity, które nie mieszczą się są usuwane. W programowaniu takie przesunięcia wykorzystywane są dzielenia lub mnożenia przez 2.

short x, y ;
x = 5;
y = 6;
x << 1; // operator << przesuwa bity  w lewo
x >> 1; // operator >> przesuwa bity w prawo
~x; // operator ~ neguje ( zamienia w zapisie bitowym 0 na 1 a 1 na 0 )
x & y // operator & oznacza koniunkcję bitow
x | y // operator | oznacza alternatywę bitową
x ^ y // operator ^ oznacza alternatywę rozłączną.

Podsumowanie

Operatory w językach programowania są bardzo ważne i warto poświęcić kilka godzin(dni) na ich przyswojenie.

Wstęp

Do napisania programu w C Plus Plus wystarczy zwykły notatnik, ale notatnik nie skompiluje nam programu, dlatego potrzebny nam będzie jakiś kompilator. W internecie jest masa kompilatorów C++, warto sobie jakiś wygooglować , pobrać i zainstalować.


Pierwsza aplikacja

Nasz program będzie pytał użytkownika o jego imię a potem je wyświetlał. Najpierw przedstawię kod programu, a potem opiszę poszczególne jego części.

#include <iostream>
#include <string>

 using namespace std;
 //główna funkcja programu main();
 int  main ()
 {
 string sImie;

 cout << "Podaj swoję imię :"<<endl;
 cin >> sImie;
 cin.get();

 cout << "Twoje imię to " << sImie <<endl;
 cin.get();

 return 0;
 }

Wyjaśnienie

Na samym początku programu mamy dyrektywy :

#include <iostream>
#include <string>

Dyrektywa ta pobiera(wczytuje) pomocne nam deklaracje np. <iostream> który, posiada deklaracje wyjścia-wejścia na powłoce (wyświetla dane otrzymane od użytkownika).
Następnie przechodzimy do głównej funkcji naszego programu, funkcji main() :

main()

W środku tej funkcji deklarujemy, że zmienna sImie ma być ciągiem znaków:

string sImie;

Wyświetlamy użytkownikowi komunikat, że chcemy poznać jego imię :

 cout << "Podaj swoję imię :"<<endl;

Pobieramy dane i przypisujemy je zmiennej sImie :

 cin >> sImie;
 cin.get();

Na sam koniec wyświetlamy zdanie z podanym wcześniej imieniem, po czym program czeka na naciśnięcie przycisku enter i się zamyka.


Podsumowanie

C++ to wyjątkowy język programowania, któremu warto poświęcić wiele uwagi. Dzięki niemu, możemy łatwo tworzyć zarówno skomplikowane jak i proste aplikacje na różne dostępne platformy.


Kod źródłowy

Do pobrania pod tym adresem

Czym są cookies ?

Najprościej mówiąc, są to pliki , które są tworzone na naszym komputerze po tym jak nasza przeglądarka zostanie o to poproszona przez serwer. Takie plik zostaje wypełniony przez serwer odpowiednimi danymi i może być przez niego czytany i modyfikowany. Brzmi niebezpiecznie ? Troszkę tak, ale „ciasteczka” obowiązują pewne ograniczenia :

  • dostęp do ciasteczka ma tylko serwer, który je stworzył.
  • limit – liczby ciasteczek utworzonych z danej domeny i limit liczby wszystkich ciasteczek na dysku użytkownika
  • nie może być większe niż 4096 bajtów ( 4 kb ).

„Cookies” mają w sobie zakodowane datę wygaśnięcia, pozwala to przeglądarce usuwanie nie potrzebnych już ciasteczek. Są one transportowane protokołem HTTP. Mają one postać ciągów i są wysyłane przez serwer WWW w następujący sposób:

* – ścieżka domeny do, której ciasteczko jest wysyłane, tzn. jeżeli ustawimy ścieżkę na /admin/ to ciasteczko będzie wysyłane tylko do http://naszadomena.pl/admin/.


Wykorzystanie w PHP

Należy pamiętać, że kiedy tworzymy ciasteczko w php, to musimy wszystko ustawić zanim wyślemy jakiekolwiek dane do przeglądarki ( np. jakimś echo, print czy np. tagiem ).
Ustawianie ciasteczek w PHP wygląda mniej więcej w ten sposób:


html*/html

Wydaje mi się, że robienie $tylkohttp true jest dobrym zagraniem, ponieważ w ten łatwy sposób ciasteczko nie może zostać odczytane przez wszystkie języki wykonywane po stronie klienta ( np. JavaScript ). Pozwala to zapobiec np. Cross-site-scripting.


Wykorzystywanie ustawionych ciasteczek

Ustawiliśmy cookie i teraz wypadało by wykorzystać jakoś zawarte w nim dane. PHP oferuję nam taką możliwość, jest nią zmienna $_COOKIE[”]. Pobieranie danych z ciasteczka jest proste, wystarczy wpisać nazwę naszego cookie w następujący sposób: [‚nasza nazwa’].

$pobranaWartosc = $_COOKIE['nazwa_naszego_ustawionego cookie'];

Prosty przykład

Wydaję mi się, że licznik wejść na stronę będzie świetnym przykładem dla początkującego na wykorzystanie ciasteczek w budowie witryny.


Demo licznika


Podsumowanie

Znajomość działania ciasteczek i umiejętność ich wykorzystania na pewno przyda się w przyszłej webmasterce, dlatego polecam wygooglować sobie jakieś artykuły o cookies-ach i poświęcić temu troszkę czasu. Google

Wstęp:

W tym wpisie postaram się przedstawić kilka najprostszych funkcji jQuery, mam nadzieję, że dzięki temu wpisowi, ktoś dołączy do szerokiego grona użytkowników tej biblioteki.

Podstawowe funkcje:

Jedną z podstawowych kategorii funkcji są efekty. Poniżej przedstawię działanie najpopularniejszych i najczęściej wykorzystywanych możliwości.

.animate();

Funkcja animate pozwala nam na stworzenie animacji, wykorzystując metody CSS.

$("div.przycisk").click(function(){
                    $("div.przyklad").animate({"left": "+=15px"}, "fast");
});

$(„.przycisk”).click(function(){ }) uruchamia funkcję animate po kliknięciu w button oznaczony class-ą „przycisk”. Animate, ze względu na to, że wybrałem opcję „fast”, szybko przesunie o 15px w lewo nasz box.

.przyklad {  position:absolute; background:#555; width: 50px; padding: 5px;  }

jestem boxem

Cały przykład :

 






  
 

jestem boxem

Demo 1

.slideToggle();

Pozwala nam na ukrywanie widocznych elementów i pokazywanie ukrytych. Funkcja jest bardzo prosta w obsłudze. Poniżej przedstawiam bardzo proste wykorzystanie tej metody.

$("#przycisk").click(function(){
                    $("div.przyklad").slideToggle("slow");
});

Demo 2

Podsumowanie:

Wszystkie możliwości biblioteki jQuery dostępne są na oficjalnej stronie jQuery. Narzędzie to jest powszechnie wykorzystywane przez webmasterów do poprawy estetyki, funkcjonalności itp. strony wykorzystując np. technologię ajax ( o której będę pisał w części II ). Warto się nim zainteresować

Do jednych z fajniejszych możliwości PHP zdecydowanie należą wyrażenia regularne ( regular expressions ). Pozwalają one na wykonanie bardzo przydatnych operacji np. porównywanie wzorca ze zdobytym ( POSTEM lub GETEM ) ciągiem.

Załóżmy więc, że mamy prosty formularz kontaktowy w którym prosimy potencjalnego użytkownika o wpisanie swojego e-maila:

Mamy nadzieje, że użytkownik wprowadzi swój adres e-mail poprawnie, ale niestety naturą ludzką są błędy, dlatego musimy to jakoś zweryfikować:

 // funkcja porównująca zdobyty ciąg z wzorem - preg_match
 if( isset($_POST['wyslij']) )
    {
             if(preg_match('/^[a-zA-Z0-9.-_]+@[a-zA-Z0-9.-_]+.[a-z]{2,4}$/D', $_POST['email'])) //porównywanie wzoru
               {
                      //wysyłamy dane bla bla bla
               }
             else
               {
                     //jak nie to coś zdziałamy może jakiś komunikat ?
                      echo '

Błędny adres e-mail

'; } }

Krótkie wyjaśnienie:

  • /^ : znacznik ten oznacza początek ciągu.
  • [a-z : oznacza zakres małych liter.
  • A-Z : oznacza zakres dużych liter.
  • 0-9 : oznacza zakres od 0 do 9.
  • .-_ : oznacza możliwe napotkanie na kropkę, myślnik lub dolny podkreślnik.
  • @ : wystąpienie małpy.
  • . : wystąpienie kropki.
  • [a-z]{2,4} : zakres małych liter + {minimalna_długość, maksymalna_długość}.
  • $/D : $ – oznacza koniec wyrażenia, a /D oznacza bezwzględny koniec wyrażenia.

Lektura do poduszki: Wyrażenia Regularne

Wielu ludzi zaczynających swoją przygodę budową stron internetowych na pewno napotkają na swojej drodze wiele problemów, które dla nich będą wydawać się wyjątkowo trudne, a rozwiązanie ich jest banalnie proste. Jednym z takich problemów jest obrzydliwie wciskające się wiersze naszego tekstu pod potraktowany floatem obrazek. Jak widać nie jest to nic najładniejszego.

Załóżmy sobie taką sytuację:

jakis tekst
.wpis{
width: 700px;
margin: auto;
}
.ikona {
float: left;
}
.tekst {
overflow: hidden;
}

Używając przepięknej funkcji overflow: hidden sprawiamy,  że tekst brzydko nie wciska się pod nasz thumbnail.