首頁 >後端開發 >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 填充來確保data 是塊大小的倍數。此填充會在資料末尾添加可變數量的字節,其中每個位元組的值表示添加的填充字節數。

新增 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);
?>

刪除PKCSCS7 填充

刪除一個密文PKCSCS中刪除PKCS7填充:
  • 解密密文以取得填滿的明文。
  • 計算 padding 長度為明文最後一個位元組的值。
  • 驗證明文的最後 padding_length 位元組都等於 padding 長度。
  • 刪除最後的 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