>  기사  >  백엔드 개발  >  PHP에서 암호화하고 해독하는 방법은 무엇입니까? PHP 암호화 및 복호화 방법

PHP에서 암호화하고 해독하는 방법은 무엇입니까? PHP 암호화 및 복호화 방법

青灯夜游
青灯夜游앞으로
2018-11-22 13:54:328399검색

이 글의 내용은 PHP에서 암호화하고 복호화하는 방법을 소개하는 것인가요? PHP 암호화 및 복호화 방법. 도움이 필요한 친구들이 참고할 수 있기를 바랍니다.

민감한 데이터 전송과 관련하여 네트워크를 통해 전송되는 데이터의 보안을 보장하려면 데이터를 네트워크에서 전송하기 전에 사전 암호화하는 것이 가장 좋습니다. 복호화에는 키(공개키 또는 개인키)가 필요하며, 키(공개키 또는 개인키)가 없는 사람은 암호화된 데이터를 획득하더라도 복호화할 수 없습니다.

이 기사에서는 주로 대칭 암호화의 AES 암호화 알고리즘, 비대칭 암호화의 RSA 암호화 알고리즘을 소개합니다. [추천 관련 동영상 튜토리얼: PHP 튜토리얼]

1. 대칭 암호화

는 단일 키 암호화 시스템의 암호화 방식을 채택하여 정보의 암호화와 복호화를 동시에 사용할 수 있습니다. 이 암호화 방법은 단일 키 암호화라고도 하는 대칭 암호화라고 합니다.

대칭 암호화 알고리즘에서 일반적으로 사용되는 알고리즘에는 DES, 3DES, TDEA, Blowfish, RC2, RC4, RC5, IDEA, SKIPJACK, AES 등이 있습니다.

AES 암호화 알고리즘

Rijndael 암호화 방법이라고도 알려진 암호화의 고급 암호화 표준(AES)은 미국 연방 정부에서 채택한 블록 암호화 표준입니다. 이 표준은 원래 DES를 대체하는 데 사용되었으며 많은 당사자에서 분석되었으며 전 세계적으로 널리 사용됩니다. 2006년에 Advanced Encryption Standard는 대칭 키 암호화를 위한 가장 널리 사용되는 알고리즘 중 하나가 되었습니다.

PHP의 OpenSSL 확장은 AES 암호화 알고리즘을 구현했습니다. OpenSSL 확장에서 제공하는 방법을 통해 데이터를 암호화하고 해독할 수 있습니다. PHP는 버전 7.2에서 MCrypt 암호화를 완전히 제거했습니다. PHP 매뉴얼은 7.1 마이그레이션 페이지에 나와 있습니다. MCrypt를 대체하기 위해 OpenSSL을 사용합니다.

PHP AES 구현(암호화, 복호화)

PHP 구현 코드:

class AES
{
    //设置AES秘钥
    private static $aes_key = 'bUYJ3nTV6VBasdJF'; //此处填写前后端共同约定的秘钥

    /**
     * 加密
     * @param string $str    要加密的数据
     * @return bool|string   加密后的数据
     */
    static public function encrypt($str) {

        $data = openssl_encrypt($str, 'AES-128-ECB', self::$aes_key, OPENSSL_RAW_DATA);
        $data = base64_encode($data);

        return $data;
    }

    /**
     * 解密
     * @param string $str    要解密的数据
     * @return string        解密后的数据
     */
    static public function decrypt($str) {

        $decrypted = openssl_decrypt(base64_decode($str), 'AES-128-ECB', self::$aes_key, OPENSSL_RAW_DATA);
        return $decrypted;
    }
}

2. 비대칭 암호화

대칭 암호화 알고리즘은 암호화 및 복호화에 사용됩니다. 알고리즘에는 암호화 및 암호 해독을 위해 두 개의 키가 필요합니다. 두 키는 공개 키(공개 키)와 개인 키(개인 키)입니다.

비대칭 암호화에 사용되는 주요 알고리즘은 RSA, Elgamal, Backpack 알고리즘, Rabin, D-H, ECC(타원 곡선 암호화 알고리즘) 등입니다.

RSA 암호화 알고리즘

RSA는 현재 가장 영향력 있는 공개 키 암호화 알고리즘입니다. 이 알고리즘은 매우 간단한 정수론 사실을 기반으로 합니다. 두 개의 큰 소수를 곱하는 것은 매우 쉽지만 이 제품은 인수분해가 매우 어렵기 때문에 제품이 암호화 키, 공개 키로 노출될 수 있으며 두 개의 큰 소수가 결합되어 개인 키를 형성합니다. 공개 키는 누구나 사용할 수 있으며, 개인 키는 해독을 위한 것입니다.

복호화기는 개인 키를 소유하고 개인 키 계산을 통해 생성된 공개 키를 암호화기에 공개합니다. 암호화는 공개 키를 사용하여 암호문을 암호화하고 해독자에게 보냅니다. 해독자는 개인 키를 사용하여 암호문을 일반 텍스트로 해독합니다.

A가 B에게 정보를 보내려고 한다고 가정해 보겠습니다. 먼저 역할을 결정합니다. A는 암호화기이고 B는 해독기입니다. 먼저 B는 비밀 키라고 하는 KEY를 무작위로 결정하고 이 KEY를 전송하지 않고 머신 B에 보관한 다음 이 KEY에서 공개 키라고 하는 다른 KEY를 계산합니다. 이 공개 키의 특성은 이를 생성한 개인 키를 자체적으로 계산하는 것이 거의 불가능하다는 것입니다. 다음으로, 공개 키는 네트워크를 통해 A에게 전송됩니다. A는 공개 키를 수신한 후 정보를 암호화하고 암호문을 네트워크를 통해 B에게 보냅니다. 암호문. 위는 RSA 알고리즘의 작업 흐름입니다.

알고리즘 구현 과정은 다음과 같습니다.

  1. 두 개의 큰 소수 p와 q를 무작위로 선택하고 p는 q와 같지 않으며 N=pq를 계산합니다.

  2. 오일러 함수에 따르면 N보다 크지 않고 N에 상대적으로 소수인 정수의 수는 (p-1)(q-1)입니다.

  3. (p-1)(q-1)과 상대적으로 소수이고 e가 (p-1)(q-1)보다 작은 정수 e를 선택하세요.

  4. d를 계산하려면 다음 공식을 사용하세요: d× e ñ 1 (mod (p-1)(q-1)).

  5. P와 Q의 기록을 파괴하세요.

위 내용에서 (N,e)는 공개키이고, (N,d)는 개인키입니다.

개인 키 및 공개 키 생성

개인 키 파일 생성:

openssl genrsa -out rsa_private_key.pem 1024

개인 키를 사용하여 공개 키 생성:

openssl rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem

생성된 공개 키와 개인 키를 사용하여 데이터 암호화 및 해독:

PHP RSA 구현(암호화, 복호화)

PHP 구현 코드(공개키 암호화, 개인키 복호화):

class RSA
{
    /**
     * @param string $str 要加密的数据
     * @param string $public_key 公钥
     * @return string
     */
    static public function encrypt($str, $public_key) {

        $encrypted = '';
        $pu_key = openssl_pkey_get_public($public_key);
        openssl_public_encrypt($str, $encrypted, $pu_key);//公钥加密

        $encrypted = base64_encode($encrypted);

        return $encrypted;
    }

    /**
     * 解密
     * @param string $str 要解密的数据
     * @param string $private_key 私钥
     * @return string
     */
    static public function decrypt($str, $private_key) {

        $decrypted = '';
        $pi_key =  openssl_pkey_get_private($private_key);
        openssl_private_decrypt(base64_decode($str), $decrypted, $pi_key);//私钥解密

        return $decrypted;
    }
}

PHP 구현 코드(개인키 암호화, 공개키 복호화):

class RSA
{
    //私钥加密 
    static public function encrypt($str, private_key) {

        $encrypted = '';
        $pi_key = openssl_pkey_get_private($private_key);
        openssl_private_encrypt($data, $encrypted, $pi_key); //私钥加密
        
        $encrypted = base64_encode($encrypted);
        
        return $encrypted;
    }
    //公钥解密
    static public function decrypt($str, $public_key) {

        $decrypted = '';
        $pu_key = openssl_pkey_get_public($public_key);
        openssl_public_decrypt(base64_decode($str), $decrypted, $pu_key);//公钥解密
        
        return $decrypted;
    }
}

요약: 위 내용이 전부입니다. 기사 내용, 모든 분들의 공부에 도움이 되었으면 좋겠습니다.

위 내용은 PHP에서 암호화하고 해독하는 방법은 무엇입니까? PHP 암호화 및 복호화 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 cnblogs.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제