簡體   English   中英

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

[英]Encrypt message in PHP, decrypt in JavaScript

我想通過php加密消息,但在客戶端,我想要javascript來解密它。 我曾經嘗試過Blowfish(使用mcrypt),但是我發現php回顯非字母數字字符,而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

來自幾個斯坦福學生的這個javascript AES加密庫是我見過的最好的:

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

但請注意他們的警告:

我們相信SJCL提供了Javascript中實際可用的最佳安全性。 (不幸的是,這並不像桌面應用程序中的那么好,因為要完全防止代碼注入,惡意服務器和旁通道攻擊是不可行的。)

更新:

在PHP中,加密后使用base64_encode() base64_decode() ,解密前使用base64_decode() 通過這種方式,它將被渲染為可安全傳輸的字符。 在瀏覽器中,使用atob()btoa()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM