PHP 암호화는 해싱 알고리즘이라고도 하는 일부 알고리즘의 도움으로 암호화 코드를 얻는 것에 불과하며 일반적으로 문자열이나 다른 입력을 사용하여 작동하며 문자열에서 고유한 지문을 생성하는 데 도움이 됩니다. /다른. 암호화에는 액세스 권한이 있는 일부 사람을 제외한 대부분의 사람들에게 노출되지 않고 데이터를 안전하게 만들기 위해 특정 텍스트/기타를 다른 코드 텍스트 또는 기타로 변경하는 작업이 포함됩니다. 아래에서 다양한 유형의 PHP 암호화 방법을 확인하세요.
광고 이 카테고리에서 인기 있는 강좌 PHP 개발자 - 전문 분야 | 8개 코스 시리즈 | 3가지 모의고사무료 소프트웨어 개발 과정 시작
웹 개발, 프로그래밍 언어, 소프트웨어 테스팅 등
현재 사용되는 암호화 방법에는 여러 가지가 있지만 일반적으로 해싱을 사용하며, 두 번째는 비밀 키 암호화, 세 번째는 Envelope Encryption 방법입니다. 모든 암호화 방법에는 각각 선택할 수 있는 여러 알고리즘이나 암호화가 있습니다(각 방법마다 고유한 약점과 장점이 있습니다). 여기서는 해싱 구현과 비밀 키 암호화에 중점을 두고 설명하겠습니다.
PHP 프로그래밍 언어의 해싱 알고리즘은 일반적으로 하나의 입력 값을 가져온 다음 이를 하나의 메시지 다이제스트로 변환합니다. 간단히 말해서 일반 텍스트 값은 고정 길이의 해시로 변환되며 하나의 원래 값을 고유한 해싱 알고리즘으로 우회하는 것만으로 유효성을 검사할 수 있습니다. 이렇게 하면 모든 사용자 비밀번호를 저장하는 데만 해싱이 완벽해집니다.
해싱이 우리 쿼리에 대한 완벽한 솔루션은 아니지만 일부는 모든 해싱 알고리즘이 동일하지 않다는 점에 주목할 가치가 있습니다. 우리는 효율적이고 빠른 MD5 및 SHA1 알고리즘을 고려한 다음 이러한 모든 것을 파일 확인 및 체크섬에 이상적으로 만듭니다. 이들의 속도로 인해 대부분은 사용자 비밀번호를 해싱하는 데 적합하지 않습니다. 최신 GPU의 계산 능력을 사용하면 무차별 대입을 통해 몇 분 만에 원래의 일반 텍스트 비밀번호/비밀번호와 의도적으로 bcrypt와 같은 느린 해싱 알고리즘/알고리즘을 공개함으로써 비밀번호가 해독됩니다. 또는 Argon2가 사용됩니다.
알고리즘으로 생성된 비밀번호를 해싱하면 실제 데이터와 원본 데이터가 확실히 모호해지고 공격 속도가 느려지는 반면 개발자는 사용 가능한 가장 강력한 알고리즘을 시도해야 합니다. PHP 언어에는 비밀번호_해시()라는 기본 구문이 있습니다.
해싱 기법인 'bcrypt'를 사용한 예시입니다.
코드:
<?php $str1 = 'Password'; $options1 = [ 'cost1' => 10, 'salt1' => '$P27r06o9!nasda57b2M22' ]; echo sprintf("The Result of crypt() function on %s is %s\n", $str1, crypt($str1, $options1['salt1'])); echo "<br>"; echo sprintf("The Result of DEFAULT function on %s is %s\n", $str1, password_hash($str1, PASSWORD_DEFAULT)); echo "<br>"; echo sprintf("The Result of BCRYPT function on %s is %s\n", $str1, password_hash($str1, PASSWORD_BCRYPT, $options1)); echo "<br>"; ?>
출력:
PHP의 비밀 키 암호화는 일반적으로 데이터 암호화 및 복호화에 하나의 단일 키를 사용합니다. 대칭 암호화라고도 합니다. 이를 위해 이전 버전의 PHP 프로그래밍 언어를 실행 중인 경우 PECL을 통해 PHP 프로그래밍 언어 나트륨을 설치하세요.
처음에는 Random_bytes() 함수 코드를 사용하여 실제로 생성되는 암호화 키가 필요합니다. 하지만 일반적으로 한 번만 수행하고 환경 변수로 저장하면 됩니다. 이것이 우리가 비밀로 간직해야 할 열쇠입니다. 비밀 키가 알려지면 암호화된 키도 손상됩니다.
$secret_key = random_bytes (SODIUM_CRYPTO_SECRETBOX_KEYBYTES);
sodium_crypto_secretbox() 함수에 전달할 값을 키/비밀 키와 $nonce를 사용하여 암호화합니다. 그런 다음 random_bytes() 함수를 사용하여 nonce 변수를 생성하는데 이는 동일/유사한 nonce를 절대 사용할 수 없기 때문입니다.
$nonce = random_bytes(SODIUM_CRYPTO_NONCEBYTES); $ciphertext = sodium_crypto_secretbox(‘This is secret key!!!’, $nonce, $secret_key);
나중에 값을 해독할 nonce가 필요하기 때문에 이는 문제를 나타냅니다. 그러나 NONCE/NONCES에는 비밀로 유지할 키가 없으므로 $ciphertext 앞에 쉽게 추가할 수 있으며 base64_encode() 함수는 실제 데이터베이스에 저장하기 전에 발생하는 값입니다.
$encoded1 = base64_encode($nonce . $ciphertext); Var_dump($encoded1);
위 구문은 값을 암호화하기 위한 것입니다. 인코딩된 값을 디코딩/암호 해독하려면 아래 구문을 사용하십시오.
$decoded1 = base64_decode($encoded1);
값을 복호화하기 직전에 mb_substr() 함수를 사용하여 nonce 변수나 함수의 길이를 추출합니다.
비밀키 암호화를 이해하기 위해 random_bytes() 함수를 구현한 예입니다. 여기서 임의 문자열의 길이는 문자열의 임의 바이트를 보호하기 위해 이진수 16진수의 도움으로 변환됩니다.
Code:
<?php $length1 = random_bytes('3'); var_dump(bin2hex($length1)); ?>
Output:
We all know that our data is vulnerable if our secret key is known/compromised. Just consider that a malicious user/attacker got access to the server point which is actually hosting our application/other. In this situation, attacker most of the times gets/discovers out the secret key which should be kept as secret. If it is discovered then our data may be in danger of exposing to the malicious user/attacker.
We can use Cloud KMS service which is actually provided by the Google Cloud Key Management Service. It provided a wide variety of so many useful features. It includes automatic key rotation and also the delayed key destruction capability.
Before sending plaintext to the CLOUD KMS, generate a unique encryption key each and every time when we actually write the data to the database. This key is called DEK (Data Encryption Key) which is actually used in encrypting the data. DEK which is sent to the Google Cloud KMS will be encrypted and then it will return the KEK (key encryption key). At last, KEK will be stored side by side in the actual database point which is next to the encrypted data and then the DEK will be destroyed.
Check out the data encryption and decryption as below:
I hope you learned what is the definition of PHP Encryption and along with the various types of PHP Encryption methods along with the examples by mentioning their brief description. An example is shown here for envelope encryption because it is cloud-based encryption.
위 내용은 PHP 암호화의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!