Kryptering af data i PHP
Hvorfor ikke md5, sha1, sha256?
Hashing algoritmer som MD5, SHA1 og SHA256 er designet til at være meget hurtig og effektive, men tiden er vokset fra disse teknologier, fordi det med vores hurtige computere i dag, er blevet så nemt at komme tilbage til det oprindelige input, ved at "vende" disse hashing algoritmer om.
Sagt på en anden måde - data som er hashet er ikke en sikker måde at gemme f.eks. passwords eller andet på.
mcrypt versus ...
I denne video gennengår vi mcrypt. Mcrypt er den mest populære krypterings-function i PHP til kryptering og dekryptering af data.
Der findes en række alternativer til mcrypt som f.eks. bcrypt og scrypt, men da vi endnu ikke er stødt på nogle webhoteller i Danmark som understøtter disse moduler endnu, har vi valgt at basere denne video på mcrypt, da denne teknologi er at finde på de fleste webhoteller.
IV (initialization vector)
Du kan vælge at bruge mcrypt sammen med en random IV, som gør dine data endnu mere sikrede, sagt på en ande måde - du har i princippet to nøgler. Husk at gemme både din $key og din dynamiske $iv-variabel, uden begge disse, kan du ikke senere dekryptere dine data.
Eksempel-kode:
<?php
### Se videoen for mere info og viden om hvordan dette kode hænger sammen:
// 128-bit key:
$Key = "1B2AE8B6CF55194C86B82B4CBAAB2";
// Mine data som skal krypteres:
$ClearTekst = "Dette er en clear-tekst som skal krypteres!";
// IV (initialization vector) med random data:
$size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC);
$iv = mcrypt_create_iv($size, MCRYPT_DEV_URANDOM);
// Krypter med mcrypt:
$CryptedData = base64_encode(mcrypt_encrypt(
MCRYPT_RIJNDAEL_128,
$Key,
$ClearTekst,
MCRYPT_MODE_CBC,
$iv
));
echo "Krypteret Data: " . $CryptedData . " <br />";
# gem vores IV, så vi sammen med vores $Key kan dekryptere
$savedIV = $iv;
$DecryptedData = mcrypt_decrypt(
MCRYPT_RIJNDAEL_128,
$Key,
base64_decode($CryptedData),
MCRYPT_MODE_CBC,
$savedIV
);
echo "Dekrypret tekst: " . $DecryptedData . " <br />";
Emner i denne video
I denne e-læringsvideo på dansk gennemgår vi følgende emner trin-for-trin:
- Hvad er MD5, SHA1, SHA512 og hvorfor skal vi undgå disse
- Hvordan kommer vi igang med mcrypt i PHP
- Hvad er Ciphers og hvilke valgmuligheder har vi? F.eks. MCRYPT_RIJNDAEL_128
- Hvad er Modes, og hvilke valgmuligheder har vi? F.eks. MCRYPT_MODE_ECB og MCRYPT_MODE_CBC
- Hvordan krypterer vi data med mcrypt_encrypt og en nøgle
- Hvordan dekrypterer vi data med mcrypt_decrypt og selvsamme nøgle