【发布时间】:2012-01-17 09:11:17
【问题描述】:
我想通过 php 加密消息,但在客户端,我希望 javascript 解密它。我曾尝试过 Blowfish(使用 mcrypt ),但我发现 php 回显非字母数字字符和 Javascript 显示字母数字。我正在使用 ajax,因此页面不会重新加载。
我测试了来自http://aam.ugpl.de/?q=node/1060 和http://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
【问题讨论】:
-
为什么需要这样做?如果是为了传输安全,您必须使用 HTTPS,否则您会通过同一条线路传输密钥,这样攻击者就可以轻松解密您的数据。如果您想阻止用户查看数据,例如with Firebug:如果有人想看,他会的。
-
这个有什么用?任何人都可以获取用于解密它的密钥。
-
OP 没有说他/她将通过网络传输密钥。如果它以其他方式分发,例如在用户注册后通过电子邮件分发,这可能会起作用,尽管它肯定不是 100% 安全...
-
其实我没有转移密钥,我使用 Diffie-Hellman 获取密钥
标签: php javascript ajax mcrypt blowfish