Heim  >  Artikel  >  Backend-Entwicklung  >  Umgang mit Datenverschlüsselung und -entschlüsselung bei der Implementierung einer API in PHP

Umgang mit Datenverschlüsselung und -entschlüsselung bei der Implementierung einer API in PHP

WBOY
WBOYOriginal
2023-06-17 15:40:401505Durchsuche

Mit der kontinuierlichen Entwicklung des Internets wird der Anwendungsbereich von API (Application Programming Interface) immer umfangreicher und Dateninteraktionen zwischen verschiedenen Systemen werden immer häufiger. Für die Übertragung sensibler Daten sind die Datenverschlüsselung und -entschlüsselung wesentliche Schritte. In diesem Artikel wird erläutert, wie mit der Datenverschlüsselung und -entschlüsselung umgegangen wird, wenn eine auf PHP basierende API implementiert wird.

1. Warum Datenverschlüsselung notwendig ist

Datenverschlüsselung bezieht sich auf die Umwandlung des ursprünglichen Klartextes in Chiffretext nach einem bestimmten Algorithmus, sodass Personen, die den entsprechenden Schlüssel nicht erhalten haben, ihn nicht interpretieren können, wodurch Datenvertraulichkeit erreicht wird. Bei der API-Entwicklung sind die Hauptgründe für die Datenverschlüsselung die folgenden zwei Punkte:

  1. Datensicherheit

Wenn die API für Dritte geöffnet ist, kann die Übertragung von Schnittstellendaten nicht in einer privaten Kommunikationsumgebung gewährleistet werden. So können die Sicherheit und Authentizität der Daten durch Verschlüsselung gewährleistet werden, um zu verhindern, dass Daten während der Übertragung gestohlen oder manipuliert werden.

  1. Legalitätsüberprüfung

Datenverschlüsselung kann die Rechtmäßigkeit der Datenübertragung durch Identitätsüberprüfung, Signatur usw. sicherstellen. Während des API-Anforderungssendevorgangs werden die Anforderungsparameter mit irreversiblen Algorithmen verschlüsselt, um die Legitimität der Anforderung sicherzustellen und illegale Manipulationen oder Fälschungen der Anforderungsdaten zu verhindern.

2. PHP implementiert die Datenverschlüsselung

  1. Symmetrischer Verschlüsselungsalgorithmus

Symmetrischer Verschlüsselungsalgorithmus bedeutet, dass der für die Verschlüsselung und Entschlüsselung verwendete Schlüssel derselbe ist. Sie müssen den Schlüssel nur als Parameter übergeben, um die Verschlüsselungs- und Entschlüsselungsvorgänge abzuschließen . . Zu den in der API-Entwicklung häufig verwendeten symmetrischen Verschlüsselungsalgorithmen gehören DES, 3DES, AES usw.

Am Beispiel des AES-Verschlüsselungsalgorithmus stellt PHP Funktionen wie openssl_encrypt() und openssl_decrypt() zur Implementierung symmetrischer Verschlüsselungsvorgänge bereit. Die Verwendung ist wie folgt:

//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;
}

wobei $data die zu verschlüsselnden Daten und $key der Schlüssel ist. Ermitteln Sie während des Verschlüsselungsprozesses die Länge des IV-Vektors, die der Verschlüsselungsalgorithmus benötigt, indem Sie openssl_cipher_iv_length() aufrufen, openssl_random_pseudo_bytes() aufrufen, um einen zufälligen IV-Vektor zu generieren, und dann die Funktion openssl_encrypt() aufrufen, um den Verschlüsselungsvorgang durchzuführen. Im Entschlüsselungsprozess wird der Chiffretext zunächst über die Funktion base64_decode() in Binärdaten wiederhergestellt, dann werden der IV-Vektor bzw. die verschlüsselten Daten extrahiert und die Funktion openssl_decrypt() wird aufgerufen, um den Entschlüsselungsvorgang durchzuführen.

  1. Asymmetrischer Verschlüsselungsalgorithmus

Asymmetrischer Verschlüsselungsalgorithmus bedeutet, dass die für die Verschlüsselung und Entschlüsselung verwendeten Schlüssel unterschiedlich sind. Im Allgemeinen wird der öffentliche Schlüssel öffentlich gemacht und zur Verschlüsselung der Daten verwendet, die dann durch den privaten Schlüssel auf dem Server entschlüsselt werden Seite. Zu den gängigen asymmetrischen Verschlüsselungsalgorithmen in der API-Entwicklung gehören RSA, DSA usw.

Am Beispiel des RSA-Verschlüsselungsalgorithmus stellt PHP Funktionen wie openssl_public_encrypt und openssl_private_decrypt bereit, um asymmetrische Verschlüsselungsvorgänge zu implementieren. Die Verwendung ist wie folgt:

//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;
}

Unter diesen sind $data die zu verschlüsselnden Daten und $public_key der öffentliche Schlüssel. Während des Verschlüsselungsprozesses werden die Daten durch Aufrufen der Funktion openssl_public_encrypt() verschlüsselt und anschließend werden die verschlüsselten Daten durch die Funktion base64_encode() codiert. Während des Entschlüsselungsprozesses werden die verschlüsselten Daten durch Aufrufen der Funktion openssl_private_decrypt() entschlüsselt und anschließend werden die entschlüsselten Daten zurückgegeben.

3. PHP implementiert die Datensignatur

Die Datensignatur in der API wird durch Hashing der Parameter auf ihre Rechtmäßigkeit überprüft. Für API-Anforderungsparameter muss der Server Datensignaturen durchführen, um die Integrität und Authentizität der Datenübertragung sicherzustellen.

Zu den häufig verwendeten Hash-Algorithmen gehören HMAC, SHA1, MD5 usw. Am Beispiel von HMAC kann die Datensignatur einfach mit der integrierten Funktion hash_hmac() von PHP implementiert werden. Die Verwendung ist wie folgt:

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

Wobei $data die zu signierenden Daten und $secret der Signaturschlüssel sind. Rufen Sie die Funktion hash_hmac() auf, um die Daten zu hashen und die signierten Daten zurückzugeben.

4. Beispiele für die Datenverschlüsselung und -entschlüsselung

Als nächstes werden wir die oben genannten Datenverschlüsselungs- und Signaturmethoden umfassend anwenden, um zu demonstrieren, wie PHP verwendet wird, um den Verschlüsselungs- und Entschlüsselungsprozess von API-Anforderungsparametern abzuschließen.

//数据加密
$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:处理签名不合法的情况
}

Im obigen Code wird zunächst die Funktion aesEncrypt() verwendet, um die Anforderungsparameter symmetrisch zu verschlüsseln, und dann wird die Funktion hmacSign() verwendet, um die verschlüsselten Daten zu hashen, um signierte Anforderungsparameter zu generieren. Nachdem der Server die Anforderung erhalten hat, überprüft er durch Hashing der Signaturdaten, ob die Signatur zulässig ist, und verwendet dann die Funktion aesDecrypt(), um die verschlüsselten Daten zu entschlüsseln und die ursprünglichen Anforderungsparameter zu erhalten.

Im eigentlichen Bewerbungsprozess muss sichergestellt werden, dass Verschlüsselungsschlüssel, Signaturschlüssel und andere Informationen nicht preisgegeben werden, um die Sicherheit der API-Daten zu gewährleisten. Gleichzeitig müssen geeignete Verschlüsselungs- und Signaturalgorithmen basierend auf den Systemnutzungsanforderungen ausgewählt werden, um die Systemleistungs- und Sicherheitsanforderungen zu erfüllen.

Das obige ist der detaillierte Inhalt vonUmgang mit Datenverschlüsselung und -entschlüsselung bei der Implementierung einer API in PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn