PHP iki yönlü bir şifreleme

5 Cevap php

Benim uygulama (tabii ki) kayıtlarını ayırt benzersiz kimliğini kullanır. Bu UID URL'ler geçirilir (örn. ./examplepage.php?UID=$example_int), diğer şeyler arasında.

Açıkçası emin istemcileri diğer müşterilerin veri erişim yok olmak yerine sunucu tarafı doğrulama sahip olsa da, ben sadece şifreli UID'leri (geçmek için PHP kullanabileceğiniz bir iki yönlü şifreleme yöntemi vardır, örneğin ./examplepage.php?EUID=$encrypted_int ), ayrıca düşünme herkes şansını azaltmak için "Ben bu tamsayı artırmak eğer hey, ne olur?"

TIA.

5 Cevap

Bu güvenlik etmesi için yanında kimliği bir karma yerleştirerek, ya da ekstra veri ile kimliği dolgu, hatta Hex kimliği dönüştürme tüm Bence oldukça iyi çalışır.

openssl_encrypt ve openssl_decrypt: PHP 5.3 gerçekten kullanımı kolay yeni bir şifreleme yöntemi tanıttı. Burada iyi belgelenmiş değil, bu yüzden burada basit bir örnek:

$textToEncrypt = "My super secret information.";
$encryptionMethod = "AES-256-CBC";  // AES is used by the U.S. gov't to encrypt top secret documents.
$secretHash = "25c6c7ff35b9979b151f2136cd13b0ff";

//To encrypt
$encryptedMessage = openssl_encrypt($textToEncrypt, $encryptionMethod, $secretHash);

//To Decrypt
$decryptedMessage = openssl_decrypt($encryptedMessage, $encryptionMethod, $secretHash);

//Result
echo "Encrypted: $encryptedMessage <br>Decrypted: $decryptedMessage";

Katı ve hızlı çünkü ben 256-AES seçti. Bu üst gizli belgeleri şifrelemek için ABD gov't tarafından kabul oldu. Bu hızlı bir makine ve yazılım düşünüyor oluyor. Burada mevcut şifreleme yöntemlerinin bir listesi:


IMPORTANT UPDATE!!!

Teşekkürler PHP 5.3.3> Bu fonksiyon biraz daha güvenli hale getirir, yeni bir parametre olduğunu işaret için Hobo ve Jorwin.

Jorwin his comment bu linki başvurulan ve burada uygulanabilir bir alıntıdır:

In 5.3.3 they added a new parameter, string $iv (initialization vector) Real parameters are: string openssl_encrypt ( string $data , string $method , string $password, bool $raw_output = false, string $iv )

$iv eksik ise, bir uyarı verilir: "Boş bir Başlatmak Vector Kullanma (iv) potansiyel olarak güvensiz ve tavsiye edilmez".

$iv başka bir uyarı, çok kısa ise: "geçti IV sadece 3 byte uzunluğunda, şifre \ 0 ile tam 8 bayt, dolgu bir IV bekliyor"

Aynı IV openssl_decrypt() kullanılmalıdır

İki yönlü şifreleme gerekmez - şifreleme secrecy korumak için, ama ne gerçekten burada arıyorsanız authenticity olduğunu.

HMACs (aslında, sağlamalarının anahtarlı) şifreleme orijinalliğini almanın bir yoludur. Sadece sunucu bilen bir anahtar kullanarak, UID bir HMAC (PHP HMAC implementation vardır) ile UID eşlik. Her isteğinin başında, HMAC edin.

Temel olarak, doğru iş için doğru araç kullanımı.

PHP pek çok iki yönlü karma algoritmalar destekler iken ben bu örnekte yararlı olmanın görmüyorum. Yapmanız gerekenler:

  1. Sağlanan id depolama satır yükleyin
  2. Sıranın sahibi doğrulanmış kullanıcı olduğunu kontrol edin ve değilse, bir özel durum ve tekrar yapmak için değil kullanıcıyı bilgilendirmek

Ama kalbin sadece algoritmaları birini seçmek karma ayarlanır ise provided.

Iki yönlü bir şifreleme kontrolü için mcrypt, ya da saf bir uygulama isterseniz phpseclib.