Зашифровать сообщение в PHP, расшифровать в JavaScript - PullRequest
1 голос
/ 10 декабря 2011

Я хочу зашифровать сообщение с помощью php, но на стороне клиента я хочу, чтобы javascript расшифровал его.Я пробовал Blowfish (используя mcrypt), но обнаружил, что php отображает не буквенно-цифровой символ, а Javascript отображает буквенно-цифровой символ.Я использую ajax, чтобы страница не перезагружалась.

Я тестировал коды из http://aam.ugpl.de/?q=node/1060 и http://www.php -einfach.de / blowfish_en.php # ausgabe .

Любая помощь приветствуется.

Редактировать: Я использую Диффи-Хеллмана для вычисления секретного ключа со случайным генерируемым числом a и b.Ниже приведен PHP-код

class Encryption
{
const CYPHER = 'blowfish';
const MODE   = 'cbc';
const KEY    = '26854571066639171754759502724211797107457520821';

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');
$decrypted_string = Encryption::decrypt($encrypted_string);

echo "encrypted: $encrypted_string<br>";
echo "decrypted: $decrypted_string<br>";

encrypted: µ˜?r_¿ÖŸŒúw‰1‹Žn!úaH 
decrypted: this is a test

1 Ответ

3 голосов
/ 10 декабря 2011

Эта криптографическая библиотека AES на javascript от нескольких студентов из Стэнфорда - лучшее, что я видел:

http://crypto.stanford.edu/sjcl/

Но обратите внимание на их предостережение:

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

UPDATE:

В PHP используйте base64_encode() после шифрования и base64_decode() перед расшифровкой. Таким образом, он будет отображаться с символами, безопасными для передачи. В браузере используйте atob() и btoa().

...