Rumah >pembangunan bahagian belakang >tutorial php >Bagaimanakah Padding PKCS7 Berfungsi dengan Penyulitan AES, dan Bagaimana Saya Boleh Menambah dan Mengalihkannya dalam PHP?

Bagaimanakah Padding PKCS7 Berfungsi dengan Penyulitan AES, dan Bagaimana Saya Boleh Menambah dan Mengalihkannya dalam PHP?

Patricia Arquette
Patricia Arquetteasal
2024-12-05 21:01:12882semak imbas

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

Padding PKCS7 untuk Penyulitan AES

Apabila menggunakan penyulitan AES, adalah perkara biasa untuk menggunakan padding PKCS7 untuk memastikan panjang data yang disulitkan sejajar dengan blok saiz algoritma penyulitan asas. Walau bagaimanapun, menambah dan mengalih keluar padding ini mungkin tidak boleh dikendalikan oleh sambungan Mcrypt, meninggalkannya sebagai tugas manual.

PKCS7 Padding Explained

Seperti yang ditakrifkan dalam RFC 5652, Pelapik PKCS #7 berfungsi dengan menambahkan bait dengan nilai yang sama dengan panjang pelapik. Contohnya, jika kita perlu pad tiga bait, bait yang dilampirkan semuanya akan mempunyai nilai 0x03.

Menambah PKCS7 Padding

Untuk menambah padding secara manual, hitung perbezaan antara panjang data semasa dan saiz blok yang dikehendaki. Nilai ini mewakili bilangan bait padding yang diperlukan. Kemudian, tambahkan banyak bait dengan panjang padding sebagai nilai pada penghujung data.

Contoh Fungsi PHP untuk Menambah Padding

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;
}

Mengalih keluar PKCS7 Padding

Untuk mengalih keluar padding, baca bait terakhir yang dinyahsulitkan data. Nilai ini mewakili panjang padding. Kemudian, hanya alih keluar bilangan bait itu daripada penghujung data.

Contoh Fungsi PHP untuk Mengalih Keluar Padding

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

Nota Pelaksanaan

  • Contoh fungsi PHP menggunakan saiz blok 16 bait untuk AES-128.
  • Adalah penting untuk mengesahkan bahawa padding adalah betul sebelum menggunakan data yang dinyahsulit dengan memastikan semua bait padding mempunyai nilai yang sama dengan panjang padding.
  • Mod ECB adalah tidak selamat. Galakkan pelanggan anda untuk mempertimbangkan menggunakan mod yang lebih selamat seperti CBC atau GCM untuk tugas penyulitan ini.

Atas ialah kandungan terperinci Bagaimanakah Padding PKCS7 Berfungsi dengan Penyulitan AES, dan Bagaimana Saya Boleh Menambah dan Mengalihkannya dalam PHP?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn