>백엔드 개발 >PHP 튜토리얼 >PKCS7 패딩은 AES 암호화와 어떻게 작동하며 PHP에서 이를 어떻게 추가하고 제거할 수 있습니까?

PKCS7 패딩은 AES 암호화와 어떻게 작동하며 PHP에서 이를 어떻게 추가하고 제거할 수 있습니까?

Patricia Arquette
Patricia Arquette원래의
2024-12-05 21:01:12875검색

How Does PKCS7 Padding Work with AES Encryption, and How Can I Add and Remove It in PHP?

AES 암호화를 위한 PKCS7 패딩

AES 암호화를 사용할 때 암호화된 데이터 길이가 블록과 일치하도록 PKCS7 패딩을 사용하는 것이 일반적입니다. 기본 암호화 알고리즘의 크기입니다. 그러나 이 패딩 추가 및 제거는 Mcrypt 확장 프로그램에서 처리되지 않아 수동 작업으로 남겨질 수 있습니다.

PKCS7 패딩 설명

RFC 5652에 정의된 대로, PKCS #7 패딩은 패딩 길이와 동일한 값으로 바이트를 추가하는 방식으로 작동합니다. 예를 들어, 3바이트를 채워야 하는 경우 추가된 바이트의 값은 모두 0x03입니다.

PKCS7 패딩 추가

패딩을 수동으로 추가하려면 다음을 계산하세요. 현재 데이터 길이와 원하는 블록 크기 간의 차이. 이 값은 필요한 패딩 바이트 수를 나타냅니다. 그런 다음 패딩 길이와 함께 해당 바이트 수를 데이터 끝에 값으로 추가합니다.

패딩 추가를 위한 샘플 PHP 함수

function addPKCS7Padding($data)
{
    $block_size = 16;
    $pad_length = $block_size - (strlen($data) % $block_size);
    $padding = str_repeat(chr($pad_length), $pad_length);
    return $data . $padding;
}

제거 PKCS7 Padding

패딩을 제거하려면 PKCS7의 마지막 바이트를 읽으십시오. 해독된 데이터. 이 값은 패딩의 길이를 나타냅니다. 그런 다음 데이터 끝에서 해당 바이트 수를 제거하면 됩니다.

패딩 제거를 위한 샘플 PHP 함수

function removePKCS7Padding($data)
{
    $pad_length = ord($data[strlen($data) - 1]);
    return substr($data, 0, -1 * $pad_length);
}

구현 참고 사항

  • 예제 PHP 함수는 16바이트의 블록 크기를 사용합니다. AES-128.
  • 모든 패딩 바이트가 패딩 길이와 동일한 값을 갖도록 하여 해독된 데이터를 사용하기 전에 패딩이 올바른지 확인하는 것이 중요합니다.
  • ECB 모드는 안전하지 않습니다. 고객이 이 암호화 작업에 CBC 또는 GCM과 같은 보다 안전한 모드를 사용하도록 권장하세요.

위 내용은 PKCS7 패딩은 AES 암호화와 어떻게 작동하며 PHP에서 이를 어떻게 추가하고 제거할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.