Какой надежный и простой способ зашифровать строку ключом без использования Open SSL? - PullRequest
0 голосов
/ 19 апреля 2010

Я не хочу использовать Open SSL или любые очень большие не встроенные библиотеки для этого. Я только хочу иметь возможность шифровать строку ключом, чтобы вы не могли расшифровать ее без него.

Кстати, я уже провел долгий поиск по стеку и я проверил эти небезопасные способы , но я хочу что-то более надежное, например, md5 (которое можно расшифровать с помощью ключа).

Спасибо

Ответы [ 3 ]

1 голос
/ 19 апреля 2010

Что-то вроде mcrypt , вероятно, то, что вы ищете. Он выполняет двухстороннее шифрование, которое не выполняют такие функции хеширования, как MD5.

Попробуйте этот класс PHP5 для шифрования с использованием mcrypt. В этом случае используется шифрование Blowfish. Вы захотите изменить ключ для каждого сайта, на котором вы его используете. Если вы его не используете, по крайней мере, он может помочь вам написать свою собственную версию.

<?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;
    }
}

?>

Использование:

$encrypted_string = Encryption::encrypt('this is a test'); // Åž-\Ž“kcþ1ÿ4gî:Xƒã%
$decrypted_string = Encryption::decrypt($encrypted_string); // this is a test
0 голосов
/ 19 апреля 2010

В большинстве предложений пропущены два ключа безопасности:

1: одноразовый номер. Любой безопасный режим работы принимает одноразовый номер (или «IV»), который должен отличаться для каждой операции шифрования. Это усложняет злоумышленнику использование взаимосвязей между различными операциями шифрования для изучения открытого текста: тривиальным примером является то, что один и тот же открытый текст, зашифрованный дважды с разными одноразовыми номерами, создает разные шифротексты.

2: MAC. Если вы не профессиональный криптограф, вы должны относиться к этому как к важному, когда вы делаете шифрование. Это код, который проверяет целостность сообщения и обеспечивает дешифрование только реального зашифрованного текста, зашифрованного этим ключом.

Я настоятельно рекомендую использовать AES в режиме EAX или GCM; они имеют гибкую обработку одноразовых номеров и управляют как шифрованием, так и аутентификацией в одном пакете, с хорошими надежными доказательствами.

0 голосов
/ 19 апреля 2010

Самый простой способ - зашифровать строку с помощью оператора XOR

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...