>백엔드 개발 >PHP 튜토리얼 >PKCS7 패딩은 AES 암호화와 어떻게 작동합니까?

PKCS7 패딩은 AES 암호화와 어떻게 작동합니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-12-05 12:18:11511검색

How Does PKCS7 Padding Work with AES Encryption?

AES 암호화를 위한 PKCS7 패딩

ECB 모드에서 128비트 AES 암호화를 사용하여 데이터를 암호화하는 경우 PKCS7 패딩이 필요할 수 있습니다. 데이터는 블록 크기의 배수입니다. 이 패딩은 데이터 끝에 가변 개수의 바이트를 추가합니다. 여기서 각 바이트의 값은 추가된 패딩 바이트 수를 나타냅니다.

PKCS7 패딩 추가

일반 텍스트 문자열에 PKCS7 패딩을 추가하려면:

  • 암호화의 블록 크기를 계산합니다. 알고리즘(AES의 경우 16바이트)
  • 일반 텍스트 길이를 블록 크기로 나눈 나머지를 계산하여 필요한 패딩 바이트 수를 결정합니다.
  • 패딩 길이를 나타내는 문자를 일반 텍스트에 추가합니다. , 필요한 횟수만큼 반복합니다.

PHP의 예 (Mcrypt)

<?php
$block_size = mcrypt_get_block_size('rijndael_128', 'ecb'); // Block size for AES
$padding_size = $block_size - (strlen($plaintext) % $block_size);
$plaintext .= str_repeat(chr($padding_size), $padding_size);
?>

PKCS7 패딩 제거

암호 텍스트 문자열에서 PKCS7 패딩을 제거하려면:

  • 암호화 패딩을 얻기 위한 암호문 plaintext.
  • padding 길이를 일반 텍스트의 마지막 바이트 값으로 계산합니다.
  • 일반 텍스트의 마지막 padding_length 바이트가 모두 패딩 길이와 같은지 확인합니다.
  • 에서 마지막 padding_length 바이트를 제거합니다. 일반 텍스트.

PHP(Mcrypt)의 예

<?php
$ciphertext = ...; // Encrypted ciphertext with PKCS7 padding
$key = ...; // Encryption key
$decrypted_plaintext = mcrypt_decrypt('rijndael_128', $key, $ciphertext, 'ecb');
$padding_length = ord($decrypted_plaintext[strlen($decrypted_plaintext) - 1]);
if (str_repeat(chr($padding_length), $padding_length) === substr($decrypted_plaintext, -1 * $padding_length)) {
    $plaintext = substr($decrypted_plaintext, 0, -1 * $padding_length); // Remove padding
} else {
    // Invalid padding
}
?>

위 내용은 PKCS7 패딩은 AES 암호화와 어떻게 작동합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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