首頁 後端開發 php教程 PHP實作API時如何處理資料加密與解密

PHP實作API時如何處理資料加密與解密

Jun 17, 2023 pm 03:40 PM
解密 加密 api處理

隨著網路的不斷發展,API(應用程式介面)的應用範圍越來越廣泛,各種系統之間的資料互動也越來越頻繁。而對於敏感資料的傳輸,資料加密和解密是不可或缺的步驟。本文將介紹基於PHP實作API時如何處理資料加密和解密。

一、為什麼要進行資料加密

資料加密是指把原有的明文依照一定的演算法轉換為密文,使得未得到對應金鑰的人無法解讀,進而實現資料的保密性。在API開發中,需要進行資料加密的主因為以下兩點:

  1. 資料安全性

API開放給第三方使用時,由於介面資料的傳輸並不能保證一定是在私密通訊環境下進行,因此可以透過加密來確保資料的安全性和真實性,避免資料在傳輸過程中被竊取或竄改。

  1. 合法性驗證

資料加密可以透過身分驗證、簽章等方式來保證資料傳輸的合法性。在API請求發送過程中,透過對請求參數進行不可逆演算法加密,可以保證請求的合法性,防止非法篡改或偽造請求資料。

二、PHP實作資料加密

  1. 對稱加密演算法

#對稱加密演算法是指,加密和解密時使用的金鑰是相同的,只需要將金鑰作為參數傳遞即可完成加密和解密操作。在API開發中常用的對稱加密演算法包括DES、3DES、AES等。

以AES加密演算法為例,PHP提供了openssl_encrypt()和openssl_decrypt()等函數來實作對稱加密操作。使用方法如下:

//AES加密
function aesEncrypt($data, $key) {
    $iv_len = openssl_cipher_iv_length('AES-128-CBC');
    $iv = openssl_random_pseudo_bytes($iv_len);
    $encrypted = openssl_encrypt($data, 'AES-128-CBC', $key, OPENSSL_RAW_DATA, $iv);
    $result = base64_encode($iv . $encrypted);
    return $result;
}
//AES解密
function aesDecrypt($data, $key) {
    $data = base64_decode($data);
    $iv_len = openssl_cipher_iv_length('AES-128-CBC');
    $iv = substr($data, 0, $iv_len);
    $encrypted = substr($data, $iv_len);
    $decrypted = openssl_decrypt($encrypted, 'AES-128-CBC', $key, OPENSSL_RAW_DATA, $iv);
    return $decrypted;
}
登入後複製

其中,$data為待加密的數據,$key為金鑰。在加密過程中,透過呼叫openssl_cipher_iv_length()取得加密演算法所需IV向量長度,呼叫openssl_random_pseudo_bytes()產生一個隨機的IV向量,然後呼叫openssl_encrypt()函數進行加密運算。在解密過程中,先透過base64_decode()函數將密文還原為二進位數據,再分別提取IV向量和加密數據,呼叫openssl_decrypt()函數進行解密操作。

  1. 非對稱加密演算法

非對稱加密演算法是指,加密和解密時使用的金鑰不同,一般將公鑰公開,用於加密數據,再由伺服器端的私鑰進行解密。在API開發中,常見的非對稱加密演算法有RSA、DSA等。

以RSA加密演算法為例,PHP提供了openssl_public_encrypt和openssl_private_decrypt等函數來實作非對稱加密操作。使用方法如下:

//RSA加密
function rsaEncrypt($data,$public_key) {
    $encrypted = '';
    openssl_public_encrypt($data,$encrypted,$public_key,OPENSSL_PKCS1_PADDING);
    $encrypted = base64_encode($encrypted);
    return $encrypted;
}
//RSA解密
function rsaDecrypt($data,$private_key) {
    $decrypted = '';
    openssl_private_decrypt(base64_decode($data),$decrypted,$private_key,OPENSSL_PKCS1_PADDING);
    return $decrypted;
}
登入後複製

其中,$data為待加密的數據,$public_key為公鑰。在加密過程中,透過呼叫openssl_public_encrypt()函數對資料進行加密,然後透過base64_encode()函數將加密後的資料進行編碼。在解密過程中,透過呼叫openssl_private_decrypt()函數對加密資料進行解密,然後傳回解密後的資料。

三、PHP實作資料簽章

API中的資料簽章是透過參數進行雜湊加密的方式進行合法性認證的。對於API請求參數,伺服器需要對其進行資料簽名,以確保資料傳輸的完整性和真實性。

常用的雜湊演算法包括HMAC、SHA1、MD5等。以HMAC為例,使用PHP內建的hash_hmac()函數可以方便實現資料簽章。使用方法如下:

//HMAC签名
function hmacSign($data, $secret) {
    $signed_data = hash_hmac('sha256', $data, $secret, false);
    return $signed_data;
}
登入後複製

其中,$data為待簽署的數據,$secret為簽署金鑰。呼叫hash_hmac()函數對資料進行雜湊加密,傳回簽章後的資料。

四、資料加密與解密範例

接下來,我們將對上述資料加密與簽章方法進行綜合應用,示範如何使用PHP完成API請求參數的加密與解密過程。

//数据加密
$data = [
    'user_id' => 12345,
    'user_name' => 'test',
    'timestamp' => time(),
];
$json_data = json_encode($data);
$encrypted_data = aesEncrypt($json_data, $encrypt_key);

//数据签名
$signature_data = $encrypted_data . $secret_key;
$signature = hmacSign($signature_data, $hmac_key);

//API请求构造
$params = [
    'data' => $encrypted_data,
    'signature'=> $signature,
];
$request_url = 'http://api.example.com' . '?'. http_build_query($params);

//API响应解析
$response_data = file_get_contents($request_url);
$response_data = json_decode($response_data, true);

//数据解密
$encrypted_data = $response_data['data'];
$signature_data = $encrypted_data . $secret_key;
$signature = $response_data['signature'];
if(hmacSign($signature_data, $hmac_key) === $signature) {
    $json_data = aesDecrypt($encrypted_data, $encrypt_key);
    $response = json_decode($json_data, true);
    //TODO:处理API响应数据
}
else {
    //TODO:处理签名不合法的情况
}
登入後複製

在上述程式碼中,首先使用aesEncrypt()函數對請求參數進行對稱加密,然後使用hmacSign()函數對加密後的資料進行雜湊簽名,產生簽名後的請求參數。伺服器接收請求後,透過對簽章資料進行雜湊加密,驗證簽章是否合法,然後使用aesDecrypt()函數對加密資料解密,得到原始請求參數。

在實際應用過程中,需要保證加密金鑰、簽章金鑰等資訊不能洩露,以確保API資料的安全性。同時,需要根據系統使用需求,選擇適當的加密和簽章演算法,以滿足系統的效能和安全要求。

以上是PHP實作API時如何處理資料加密與解密的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

<🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系統,解釋
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆樹的耳語 - 如何解鎖抓鉤
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1665
14
CakePHP 教程
1424
52
Laravel 教程
1322
25
PHP教程
1269
29
C# 教程
1249
24
揭秘HTTP狀態碼460的出現原因 揭秘HTTP狀態碼460的出現原因 Feb 19, 2024 pm 08:30 PM

解密HTTP狀態碼460:為什麼會出現這個錯誤?引言:在日常的網路使用中,常常會遇到各種各樣的錯誤提示,其中包括HTTP狀態碼。這些狀態碼是HTTP協定定義的一種機制,用來指示請求的處理。在這些狀態碼中,有一種比較罕見的錯誤碼,即460。本文將深入探討這個錯誤碼,並解釋為什麼會出現這個錯誤。 HTTP狀態碼460的定義:首先,我們要先了解HTTP狀態碼的基

winrar怎麼加密壓縮包-winrar加密壓縮包方法 winrar怎麼加密壓縮包-winrar加密壓縮包方法 Mar 23, 2024 pm 12:10 PM

小編將為大家介紹加密壓縮的三種方法:方法一:加密最簡單的加密方法,就是在加密檔案時輸入想要設定的密碼,完成加密和壓縮了。方法二:自動加密普通的加密方式,需要我們加密每個檔案的時候都需要輸入密碼,如果你想要加密大量壓縮包,並且密碼是一樣的話,那麼我們可以在WinRAR中設定自動加密,之後只要正常壓縮文件,WinRAR會為每個壓縮包添加密碼。方法如下:開啟WinRAR,點選選項–設定設定介面中,切換到【壓縮】,點選建立預設設定–設定密碼在這裡輸入我們想要設定的密碼,點選確定就完成設定了,我們只需要正

資料夾加密如何設定密碼不壓縮 資料夾加密如何設定密碼不壓縮 Feb 20, 2024 pm 03:27 PM

資料夾加密是一種常見的資料保護方法,它可以將資料夾中的內容加密,使得只有掌握解密密碼的人能夠存取其中的檔案。在進行資料夾加密時,有一些常見的方法可以用來設定密碼,而不需要壓縮檔案。首先,我們可以使用作業系統自帶的加密功能來設定資料夾密碼。對於Windows使用者來說,可以透過以下步驟來設定:選擇要加密的資料夾,滑鼠右鍵點選資料夾,選擇「屬性」選

word解密怎麼設定 word解密怎麼設定 Mar 20, 2024 pm 04:36 PM

現今的工作環境中,大家的保密意識越來越強了,在使用軟體的時候也常常進行加密操作,對文件進行保護。尤其是重點的文件,保密意識更要增加,時時刻刻將文件的安全性放在首要位置。那麼關於word解密不知道大家理解得怎麼樣,具體該如何操作?今天我們就透過下文的講解為大家實際展示一下關於word解密的過程,需要學習word解密知識的小夥伴不要錯過今天的課程。首先需要進行解密操作來保護文件,這意味著對文件進行了保護文檔處理。在對文件進行此處理後,再次開啟文件會彈出提示。解密檔案的方法是輸入密碼,這樣就可以直接

蘋果手機相簿加密怎麼設定 蘋果手機相簿加密怎麼設定 Mar 02, 2024 pm 05:31 PM

在蘋果手機中,用戶可以根據自己的需求來加密相簿。有些用戶並不清楚該怎麼設定。可以將需要加密圖片加入備忘錄後,再去鎖定備忘錄即可,接下來就是小編為用戶帶來的手機相簿加密設定方法的介紹,有興趣的用戶快來一起看看吧!蘋果手機使用教學蘋果手機相簿加密怎麼設定答:將需要加密圖片加入備忘錄後,再去鎖定備忘錄即可詳情介紹:1、進入相冊,選擇需要加密的圖片,再點擊下方的【新增到】。 2、選擇【加入備忘錄】。 3.進入備忘錄,找到剛更創建的備忘錄,進入,點選右上角的【傳送】圖示。 4.點選下方的【鎖定備

加密老兵們的新項目 Analog:融資 1600 萬美元,有空投預期 加密老兵們的新項目 Analog:融資 1600 萬美元,有空投預期 Feb 22, 2024 pm 04:50 PM

原文作者:Meteor,ChainCatcher原文編輯:Marco,ChainCatcher近期,全鏈互通協議Analog因披露1600萬美元融資而進入公眾視野,投資機構包括TribeCapital、NGCVentures、Wintermute、GSR、NEAR、OrangeDAO,以及MikeNogratzO,以及MikeNogratz的另類資產管理公司SamaraAssetGroup、BalajiSrinivasan等。 2023年底,Analog在業界引起了一些轟動,他們在X平台發布了關於開放測試網註冊活動的

螢石雲視訊電腦版加密了怎麼解開? -螢石雲視訊電腦版退出全螢幕? 螢石雲視訊電腦版加密了怎麼解開? -螢石雲視訊電腦版退出全螢幕? Mar 18, 2024 pm 12:25 PM

螢石雲解除視訊加密的方法:有多種方法可以解除螢石雲視訊加密,其中一種是透過使用螢石雲手機App。用戶只需進入裝置列表,選擇要解密的攝影機並進入裝置詳情頁面。在裝置詳情頁,找到「設定」選項,然後選擇「影片加密」進行相關設定。在視訊加密設定介面中,可以選擇關閉視訊加密的選項,儲存設定即可完成解密操作。這種簡單的步驟可以讓使用者輕鬆解除視訊加密,提升攝影機的使用便利性。如果您使用螢石雲的電腦用戶端,同樣可以透過類似的步驟來取消視訊加密。只需登入後選擇對應的鏡頭,進入裝置詳情介面,然後在設定中尋找影片加

解密PyCharm解釋器新增的技巧 解密PyCharm解釋器新增的技巧 Feb 21, 2024 pm 03:33 PM

解密PyCharm解釋器添加的技巧PyCharm是許多Python開發者首選的整合開發環境(IDE),它提供了許多強大的功能來提高開發效率。其中,解釋器的設定是PyCharm中一個重要的環節,正確設定解釋器可以幫助開發者順利執行程式碼並除錯程式。本文將介紹一些解密PyCharm解釋器所新增的技巧,並結合具體程式碼範例來展示如何正確配置解釋器。新增和選擇解釋器在Py

See all articles