Sağlam Ne ve Open SSL kullanmadan tuşu ile bir dize şifrelemek için kolay yolu?

3 Cevap php

I don't want to use Open SSL or any very big none-built-in libraries for this. I only want to be able to encrypt a string with a key so you can't decrypt it without it.

Bu arada, ben zaten stackoverflow üzerinde uzun bir arama yaptım ve ben bu unsecure ways teslim ettik ama (bir anahtar ile çözülebilir) md5 gibi sağlam bir şey istiyorum.

Teşekkürler

3 Cevap

Gibi bir şey mcrypt aradığınız muhtemelen ne olduğunu. Bu MD5 gibi bir özetleme fonksiyonları yapmazsanız iki yönlü şifreleme yapar.

Mcrypt kullanarak şifreleme için bu PHP5 sınıf deneyin. Bu durumda dvd şifreleme kullanıyor. Sen bunu kullanmak her site için anahtarını değiştirmek isteyeceksiniz. Bunu kullanmak istemiyorsanız, en azından bunun kendi sürümünü yazma konusunda size rehberlik edebilir.

<?php

class Encryption
{
    const CYPHER = 'blowfish';
    const MODE   = 'cfb';
    const KEY    = '7QQvcT9Ga7R6QC3';

    public function encrypt($plaintext)
    {
        $td = mcrypt_module_open(self::CYPHER, '', self::MODE, '');
        $iv = mcrypt_create_iv(mcrypt_enc_get_iv_size($td), MCRYPT_RAND);
        mcrypt_generic_init($td, self::KEY, $iv);
        $crypttext = mcrypt_generic($td, $plaintext);
        mcrypt_generic_deinit($td);
        return $iv.$crypttext;
    }

    public function decrypt($crypttext)
    {
        $plaintext = '';
        $td        = mcrypt_module_open(self::CYPHER, '', self::MODE, '');
        $ivsize    = mcrypt_enc_get_iv_size($td);
        $iv        = substr($crypttext, 0, $ivsize);
        $crypttext = substr($crypttext, $ivsize);
        if ($iv)
        {
            mcrypt_generic_init($td, self::KEY, $iv);
            $plaintext = mdecrypt_generic($td, $crypttext);
        }
        return $plaintext;
    }
}

?>

Kullanımı:

$encrypted_string = Encryption::encrypt('this is a test'); // Åž-\Ž“kcþ1ÿ4gî:Xƒã%
$decrypted_string = Encryption::decrypt($encrypted_string); // this is a test

Çoğu önerileri güvenlik açısından önemli iki şey dışında bırakacaktır:

1: şimdiki zaman. Operasyonun herhangi güvenli modu her şifreleme işlemi için farklı olmak zorunda, bir seferlik (ya da "IV") alacak. Bu zor saldırgan şifresiz hakkında bilgi edinmek için ayrı şifreleme işlemleri arasındaki ilişkileri yararlanmak için yapar: Önemsiz bir örnek, farklı Nonce'lar ile iki kez şifrelenmiş aynı şifresiz farklı ciphertexts üretiyor olmasıdır.

2: MAC. Bir profesyonel cryptographer olmadıkça şifreleme yaptığınızda, bu gibi temel tedavi gerekir. Bu mesajın bütünlüğünü denetler ve bu anahtarla şifrelenmiş tek gerçek şifreli şifresini sağlayan bir koddur.

Ben kuvvetle EAX veya HGK modlarına AES kullanmanızı öneririz; Onlar esnek Nonce tutuşu var ve arkalarında iyi sağlam deliller ile, tek bir pakette şifreleme ve kimlik doğrulama hem yönetmek.

basit yolu XOR operatörünü kullanarak bir dize şifrelemek için