Rumah >pembangunan bahagian belakang >tutorial php >Bagaimana untuk Menambah dan Mengalih Keluar Padding PKCS7 untuk Penyulitan AES dalam Mod ECB?

Bagaimana untuk Menambah dan Mengalih Keluar Padding PKCS7 untuk Penyulitan AES dalam Mod ECB?

Barbara Streisand
Barbara Streisandasal
2024-12-03 22:57:20675semak imbas

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

Menambah dan Mengalih Keluar Padding PKCS7 untuk Penyulitan AES

Apabila menyulitkan data menggunakan penyulitan AES 128-bit dalam mod Buku Kod Elektronik (ECB), ia adalah diperlukan untuk menambah dan mengalih keluar padding PKCS7 pada plaintext dan ciphertext, masing-masing.

Pelapik PKCS7 ialah kaedah yang ditakrifkan dalam RFC 5652 yang memastikan panjang data ialah gandaan saiz blok. Ia melibatkan penambahan seberapa banyak bait yang diperlukan untuk mengisi blok terakhir, di mana setiap bait ditetapkan kepada bilangan bait padding yang ditambahkan.

Menambah Padding PKCS7

Untuk menambah Pelapik PKCS7 kepada plaintext sebelum penyulitan menggunakan AES:

  1. Tentukan saiz blok daripada algoritma AES (biasanya 16 bait untuk AES 128-bit).
  2. Kira bilangan bait yang diperlukan untuk mengisi blok terakhir: pad = block_size - (plaintext_length % block_size).
  3. Buat rentetan dengan aksara berulang chr(pad) untuk mewakili padding bait.
  4. Tambahkan rentetan padding pada plaintext.

Alih keluar Padding PKCS7

Untuk mengalih keluar padding PKCS7 daripada ciphertext selepas penyahsulitan menggunakan AES :

  1. Tentukan saiz blok AES algoritma.
  2. Dapatkan bait terakhir teks sifir.
  3. Tetapkan pad saiz padding sama dengan nilai bait terakhir.
  4. Potong bait pad terakhir daripada ciphertext.

Fungsi PHP untuk melaksanakannya operasi:

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

Perhatikan bahawa anda disyorkan untuk menggunakan CBC atau mod rantaian lain dan bukannya ECB untuk penyulitan selamat.

Atas ialah kandungan terperinci Bagaimana untuk Menambah dan Mengalih Keluar Padding PKCS7 untuk Penyulitan AES dalam Mod ECB?. 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