PHP:運用對稱密鑰演算法加密與解密訊息

2021/12/29 590 1 網站技術 , 資訊安全 , PHP

一般來說,我們若直接使用 HTTP 協定傳輸資料,所有東西都會是明文傳輸,因此傳輸過程中只要有人攔截,就可以擷取到兩台機器間所傳輸的資料,這對一些具有機密性質資訊來說是存在著很大的風險!雖然 HTTPS 已經很普及了!但若在應用層就把加密寫好,那肯定會是更加的安全!所以這次要來學習使用 PHP 後端程式來做對稱密鑰演算法加密與解密訊息,所謂「對稱密鑰」就是指傳輸方與接收方不管做加密或解密都是使用同一個把私密密鑰,我們這次使用的演算法是 AES(Advanced Encryption Standard,中譯:進階加密標準),這是早期用來取代 DES(Data Encryption Standard,中譯:資料加密標準)的演算法,後者因為它使用的 56 位金鑰過短已被確認為不安全的加密方法。這次用的完整加密方法名稱為「AES-256-CBC」,剛剛已經提過最前面的了!256 是指 KEY 的長度為 32 Byte(32*8=256bit),CBC 是一種密碼的加密模式。PHP 加解密程式碼如下(程式碼修改自這篇文章)

<?php

function encrypt($key, $payload)
{
    $iv = openssl_random_pseudo_bytes(openssl_cipher_iv_length('aes-256-cbc'));
    $encrypted = openssl_encrypt($payload, 'aes-256-cbc', $key, 0, $iv);
    return base64_encode($encrypted . '::' . $iv);
}

function decrypt($key, $garble)
{
    list($encrypted_data, $iv) = explode('::', base64_decode($garble), 2);
    return openssl_decrypt($encrypted_data, 'aes-256-cbc', $key, 0, $iv);
}

echo $encode = encrypt("key", "password"); //Vmk0YXM1aVRmWTZwSzczV3QzNVZYQT09Ojphq8CWGy9kmz3R77cd8d9C
echo $decode = decrypt("key", $encode); //password
?>

encrypt 指的是加密、decrypt 指的是解密,過程是這樣的,我們先把「password」字串用「key」這個金鑰加密,會呈現一組看不懂的亂碼,這個就是加密後的樣子, 接著下一行程式用同一個「key」金鑰做解密,最後還原出本來的「password」字串。這個程式可以運用在很多地方,加強網站或伺服器之間的資料傳輸安全!


▲ 精選圖片。

贊助廣告 ‧ Sponsor advertisements

留言區 / Comments

萌芽論壇