>백엔드 개발 >PHP 튜토리얼 >ECB 모드에서 AES 암호화를 위해 PKCS7 패딩을 추가하고 제거하는 방법은 무엇입니까?

ECB 모드에서 AES 암호화를 위해 PKCS7 패딩을 추가하고 제거하는 방법은 무엇입니까?

Barbara Streisand
Barbara Streisand원래의
2024-12-03 22:57:20676검색

How to Add and Remove PKCS7 Padding for AES Encryption in ECB Mode?

AES 암호화를 위한 PKCS7 패딩 추가 및 제거

전자 코드북(ECB) 모드에서 128비트 AES 암호화를 사용하여 데이터를 암호화하는 경우 일반 텍스트와 암호문에 PKCS7 패딩을 추가하고 제거하는 데 필요합니다.

PKCS7 패딩은 데이터 길이가 블록 크기의 배수가 되도록 보장하는 RFC 5652에 정의된 방법입니다. 여기에는 마지막 블록을 채우는 데 필요한 만큼의 바이트를 추가하는 작업이 포함되며, 여기서 각 바이트는 추가된 패딩 바이트 수로 설정됩니다.

PKCS7 패딩 추가

추가하려면 AES를 사용하여 암호화하기 전에 일반 텍스트에 PKCS7 패딩:

  1. AES 알고리즘(128비트 AES의 경우 일반적으로 16바이트).
  2. 마지막 블록을 채우는 데 필요한 바이트 수를 계산합니다. pad = block_size - (plaintext_length % block_size).
  3. 문자열 생성 패딩 바이트를 나타내기 위해 반복 문자 chr(pad)를 사용합니다.
  4. 패딩 문자열을 plaintext.

PKCS7 패딩 제거

AES를 사용하여 암호 해독한 후 암호문에서 PKCS7 패딩을 제거하려면:

  1. 블록 크기 결정 AES 알고리즘의
  2. Get 암호문의 마지막 바이트.
  3. 패딩 크기 패드를 마지막 바이트 값과 동일하게 설정합니다.
  4. 암호문에서 마지막 패드 바이트를 잘라냅니다.

이러한 작업을 수행하는 PHP 함수:

function encrypt($plaintext, $key) {
    $block = mcrypt_get_block_size('aes', 'ecb');
    $pad = $block - (strlen($plaintext) % $block);
    $plaintext .= str_repeat(chr($pad), $pad);
    return mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key, $plaintext, MCRYPT_MODE_ECB);
}

function decrypt($ciphertext, $key) {
    $ciphertext = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $key, $ciphertext, MCRYPT_MODE_ECB);
    $block = mcrypt_get_block_size('aes', 'ecb');
    $pad = ord($ciphertext[strlen($ciphertext) - 1]);
    return substr($ciphertext, 0, -1 * $pad);
}

사용을 권장합니다. 안전한 암호화를 위해 ECB 대신 CBC 또는 기타 체인 모드를 사용하세요.

위 내용은 ECB 모드에서 AES 암호화를 위해 PKCS7 패딩을 추가하고 제거하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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