在PHP中加密消息,在JavaScript中解密

时间:2011-12-10 11:48:00

标签: php javascript ajax mcrypt blowfish

我想通过php加密消息,但在客户端,我想要javascript来解密它。我曾尝试过Blowfish(使用mcrypt),但我发现php回显非alpha-numberic字符和Javascript显示字母数字。我正在使用ajax,以便页面不会重新加载。

我测试了http://aam.ugpl.de/?q=node/1060http://www.php-einfach.de/blowfish_en.php#ausgabe的代码。

感谢任何帮助。

编辑:我使用Diffie-Hellman计算随机生成的数字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 个答案:

答案 0 :(得分:3)

来自几个斯坦福学生的这个javascript AES加密库是我见过的最好的:

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

但请注意他们的警告:

  

我们相信SJCL提供了Javascript中实际可用的最佳安全性。 (不幸的是,这并不像桌面应用程序那么好,因为完全防止代码注入,恶意服务器和旁道攻击是不可行的。)

更新:

在PHP中,在加密后使用base64_encode(),在解密前使用base64_decode()。通过这种方式,它将被渲染为可安全传输的字符。在浏览器中,使用atob()btoa()