Не удается заставить класс шифрования работать - PullRequest
1 голос
/ 09 августа 2010

Я не могу заставить работать класс шифрования (он находится в отдельном файле в папке классов). Код для класса:

class SymmetricCrypt
{
    // Encryption/decryption key.
    private static $msSecretKey = "Hello";

    // The initialisation vector.
    private static $msHexaIv = "c7098adc8d6128b5d4b4f7b2fe7f7f05";

    // Use the Rijndael Algorithm.
    private static $msCipherAlgorithm = MCRYPT_RIJNDAEL_128;

    public static function Encrypt($plainString)
    {
        $binary_iv = pack("H*", SymmetricCrypt::$msHexaIv);

        // Encrypt source.
        $binary_encrypted_string = mcrypt_encrypt(SymmetricCrypt::$msCipherAlgorithm, SymmetricCrypt::$msSecretKey, $plainString, MCRYPT_MODE_CBC, $binary_iv);

        // Convert $binary_encrypted_string to hexadeciaml format.
        $hexa_encrypted_string = bin2hex($binary_encrypted_string);
        return $hexa_encrypted_string;
    }

    public static function Decrypt($encryptedString)
    {
        $binary_iv = pack("H*", SymmetricCrypt::$msHexaIv);

        // Convert string in hexadecimal to byte array.
        $binary_encrypted_string = pack("H*", $encryptedString);

        // Decrypt $binary_encrypted_string,
        $decrypted_string = mcrypt_decrypt(SymmetricCrypt::$msCipherAlgorithm, SymmetricCrypt::$msSecretKey, $binary_encrypted_string, MCRYPT_MODE_CBC, $binary_iv);

        return $decrypted_string;
    }
}

Вот как я называю класс:

require_once 'classes/symmetric_crypt.php';
$sc = new SymmetricCrypt();
$password = "password";
$ec_password = $sc->Encrypt($password);

... insert into database.

Если я отображаю содержимое $ password, то отображается «пароль». Если я повторю $ ec_password, он ничего не возвращает.

Я использовал его раньше в другом проекте на другом сервере. Может ли это быть что-то, связанное с сервером? Есть другие идеи?

Спасибо

Адриан

1 Ответ

0 голосов
/ 09 августа 2010

Работает здесь .

Два примечания:

  • Ваши векторы инициализации не должны использоваться повторно.В противном случае становится проще найти ключ шифрования (см. WEP).
  • Как и говорилось в Premiso, вы не должны хранить пароли хранилища в виде расшифруемых строк.Используйте соленые хеши с сильными хеш-функциями (не MD5!).
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...