警告:避免使用這些方法加密密碼;相反,採用這些方法加密密碼;相反,採用密碼哈希演算法來安全儲存密碼。
當使用 PHP 5.4 或更高版本並希望程式碼可攜性時,請利用提供經過驗證的加密的現有程式庫。一旦您選擇了加密方法,您就可以使用 Openssl 方法,例如 openssl_encrypt() 和 openssl_decrypt()。
考慮使用高級加密標準 (AES)用於加密的 CTR 模式。此方法提供了安全性和效能之間的最佳平衡。請參閱 openssl_get_cipher_methods() 以取得支援的方法清單。
以下 PHP 類別提供了使用 OpenSSL 的簡單加密/解密包裝器:
class UnsafeCrypto { const METHOD = 'aes-256-ctr'; public static function encrypt($message, $key, $encode = false) { // ... if ($encode) { return base64_encode($nonce.$ciphertext); } return $nonce.$ciphertext; } public static function decrypt($message, $key, $encoded = false) { // ... $plaintext = openssl_decrypt( $ciphertext, self::METHOD, $key, OPENSSL_RAW_DATA, $nonce ); return $plaintext; } }
為了增強安全性,實施身份驗證以驗證加密資料的完整性:
class SaferCrypto extends UnsafeCrypto { const HASH_ALGO = 'sha256'; public static function encrypt($message, $key, $encode = false) { // ... if ($encode) { return base64_encode($mac.$ciphertext); } // Prepend MAC to the ciphertext and return to caller return $mac.$ciphertext; } public static function decrypt($message, $key, $encoded = false) { // ... $calculated = hash_hmac( self::HASH_ALGO, $ciphertext, $authKey, true ); if (!self::hashEquals($mac, $calculated)) { throw new Exception('Encryption failure'); } // Pass to UnsafeCrypto::decrypt $plaintext = parent::decrypt($ciphertext, $encKey); return $plaintext; } }
以上是如何在PHP中實現簡單的雙向加密和認證?的詳細內容。更多資訊請關注PHP中文網其他相關文章!