WEB開發中常見的加密方式有哪些


今天,我們對信息安全越來越受重視,WEB開發中的各種加密也變得更加重要。通常跟服務器的交互中,為確保數據傳輸的安全性,避免被人抓包篡改數據,除了 https 的應用,還需要對傳輸數據進行加解密。今天我們來了解下有哪些常見的加密方式。

單向散列加密

單向散列(hash)加密是指把任意長的輸入串變化成固定長的輸出串,並且由輸出串難以得到輸入串的加密方法,這種方法稱為單項散列加密。廣泛應用於對敏感數據加密,比如用戶密碼,請求參數,文件加密等。我們開發中存儲用戶密碼就用到了單向散列加密算法。

常見的單向散列加密算法有:

  • MD5
  • SHA
  • MAC
  • CRC

單向散列加密算法的優點有(以MD5為例):

  • 方便存儲:加密后都是固定大小(32位)的字符串,能夠分配固定大小的空間存儲。
  • 損耗低:加密/加密對於性能的損耗微乎其微。
  • 文件加密:只需要32位字符串就能對一個巨大的文件驗證其完整性。
  • 不可逆:大多數的情況下不可逆,具有良好的安全性。

單向散列加密的缺點就是存在暴力破解的可能性,最好通過加鹽值的方式提高安全性,此外可能存在散列沖突。我們都知道MD5加密也是可以破解的。

對於PHPer來說,不推薦使用md5()簡單加密,而是推薦大家使用password_hash()對數據加密存儲,該函數使用足夠強度的單向散列算法創建密碼的哈希(hash),使加密后的數據更加安全可靠。對於用戶密碼的加密存儲和驗證支持相當好。

示例代碼:

//密碼加密
$password = '123456';
$passwordHash = password_hash(
    $password,
    PASSWORD_DEFAULT,
    ['cost' => 12]
);

//密碼驗證
if (password_verify($password, $passwordHash)) {
    //Success
} else {
    //Fail
}

對稱加密

同一個密鑰可以同時用作數據的加密和解密,這種方法稱為對稱加密。應用於相對大一點的數據量或關鍵數據的加密的場景。我們開發中常用到接口參數簽名驗證服務就用到了對稱加密算法。

常見的對稱加密算法有:

  • DES
  • AES

AES 是 DES 的升級版,密鑰長度更長,選擇更多,也更靈活,安全性更高,速度更快。

對稱加密優點是算法公開、計算量小、加密速度快、加密效率高。

缺點是發送方和接收方必須商定好密鑰,然后使雙方都能保存好密鑰,密鑰管理成為雙方的負擔。

對稱算法的安全性依賴於密鑰,泄漏密鑰就意味着任何人都可以對他們發送或接收的消息解密,所以密鑰的保密性對通信的安全性至關重要。

PHP示例

//DES加密
$key = '123kils1321dshfdsvcxpUsdaq23'; //安全密鑰
$data = 'name=iphone11&order_id=201233232323123&price=3357&num=2';//加密明文
$decodeData = openssl_encrypt($data, 'DES-ECB', $key, 0);

使用PHP自帶的openssl_encrypt加密方法,對數據進行DES加密結果如下:

oc3PdhugNue/t3i8HfXjd9YUP9BnTLg0Re9R1u2fsZr0jU2hIpCIjR0bruAwNSIGkqulrNHGYm8=

另外一方在拿到密文后,再使用相同的密鑰,使用openssl_decrypt()對密文進行DES解密:

$key = '123kils1321dshfdsvcxpUsdaq23'; //安全密鑰
$decodeData = 'oc3PdhugNue/t3i8HfXjd9YUP9BnTLg0Re9R1u2fsZr0jU2hIpCIjR0bruAwNSIGkqulrNHGYm8=';
$de = openssl_decrypt($decodeData, 'DES-ECB', $key, 0);
echo $de;

運行代碼,最后得到解密后的結果:

name=iphone11&order_id=201233232323123&price=3357&num=2

DES-ECB是加密方式,可以到php官方文檔上查看更多加密方式:https://www.php.net/manual/zh/function.openssl-get-cipher-methods.php

非對稱加密

非對稱加密是指需要兩個密鑰來進行加密和解密,這兩個秘鑰分別是公鑰(public key)和私鑰(private key),這種方法稱為非對稱加密。非對稱加密適合於對安全性要求很高的場景,適合加密少量數據,比如支付數據、CA數字證書等。

常見的非對稱加密算法有RSARSA2

非對稱加密的優點是與對稱加密相比,安全性更好,加解密需要不同的密鑰,公鑰和私鑰都可進行相互的加解密。

缺點是加密和解密花費時間長、速度慢,只適合對少量數據進行加密。

非對稱加密算法的RSA2比RSA有更強的安全能力。螞蟻金服,新浪微博 都在使用 RSA2 算法。

創建公鑰和私鑰:

openssl genrsa -out private_key.pem 2048
openssl rsa -in private_key.pem -pubout -out public_key.pem

執行上面命令,會生成private_key.pempublic_key.pem 兩個文件。

具體示例代碼我們在后續的文章專門會講解,敬請留意。

前端加密

前端的朋友可能會關注前端js加密,我們在做 WEB 的登錄功能時一般是通過 Form 提交或 Ajax 方式提交到服務器進行驗證的。為了防止抓包,登錄密碼肯定要先進行一次加密(RSA),再提交到服務器進行驗證。一些大公司都在使用,比如淘寶、京東、新浪 等。

前端加密也有很多現成的js庫,如:

JS-RSA: 用於執行OpenSSL RSA加密、解密和密鑰生成的Javascript庫,https://github.com/travist/jsencrypt

MD5: 單向散列加密md5 js庫,https://github.com/blueimp/JavaScript-MD5

crypto-js: 對稱加密AES js庫,https://github.com/brix/crypto-js

 

https://www.helloweba.net/news/629.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM