>  기사  >  백엔드 개발  >  PHP에서 API를 구현할 때 데이터 암호화 및 복호화를 처리하는 방법

PHP에서 API를 구현할 때 데이터 암호화 및 복호화를 처리하는 방법

WBOY
WBOY원래의
2023-06-17 15:40:401563검색

인터넷의 지속적인 발전과 함께 API(Application Programing Interface)의 응용 범위가 점점 더 광범위해지고 있으며, 다양한 시스템 간의 데이터 상호 작용이 점점 더 빈번해지고 있습니다. 민감한 데이터를 전송하려면 데이터 암호화 및 암호 해독이 필수 단계입니다. 본 글에서는 PHP 기반의 API 구현 시 데이터 암호화 및 복호화 처리 방법을 소개합니다.

1. 데이터 암호화가 필요한 이유

데이터 암호화란 원본 일반 텍스트를 특정 알고리즘에 따라 암호문으로 변환하여 해당 키를 얻지 못한 사람이 이를 해석할 수 없도록 함으로써 데이터 기밀성을 달성하는 것을 말합니다. API 개발에서 데이터 암호화의 주요 이유는 다음 두 가지입니다.

  1. 데이터 보안

API가 제3자에게 공개되면 인터페이스 데이터의 전송이 비공개 통신 환경에서 보장될 수 없습니다. 따라서 암호화를 통해 데이터의 보안과 신뢰성을 보장하여 전송 중에 데이터가 도난당하거나 변조되는 것을 방지할 수 있습니다.

  1. 합법성 확인

데이터 암호화는 신원 확인, 서명 등을 통해 데이터 전송의 적법성을 보장할 수 있습니다. API 요청 전송 프로세스 중에 요청 매개변수는 되돌릴 수 없는 알고리즘으로 암호화되어 요청의 적법성을 보장하고 요청 데이터의 불법 변조 또는 위조를 방지합니다.

2. 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() 함수를 호출하여 암호화된 데이터를 복호화한 후 복호화된 데이터를 반환합니다.

3. 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() 함수를 호출하여 데이터를 해시 암호화하고 서명된 데이터를 반환합니다.

4. 데이터 암호화 및 복호화 예제

다음으로 위의 데이터 암호화 및 서명 방법을 포괄적으로 적용하여 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으로 문의하세요.