Я очень новичок в OpenSSL EVP_ * Интерфейсы на Linux. И, к сожалению, разработчики OpenSSL не имеют очень хорошей документации.
Я использую интерфейс EVP_ * на Linux C для шифрования и дешифрования с помощью aes_cbc_256.
В этом Размер ключа составляет 256 бит, IV - 128 бит, а размер блока - 16B / 128 бит.
Ожидание означает, что размер зашифрованного текста равен размеру обычного текста, если данные находятся в Блок выровнен. Но вместо этого следует следующая формулировка -> output_size = input_size + (block_size - (input_size% block_size))
Это следующие результаты теста, которые я получил, где случаи 2 и 3 - это те, которые я не понял как :
Случай 2 : output_size = 48, который я получаю, но я не понимаю, если данные выровнены, почему в одном и том же отступе?
Случай 3 : output_size = 32, но я получаю 64
CASE 1 (PT не выровнять по размеру блока):
aakash@aakash-VirtualBox: / unit_test $ ./test
открытый текст: 31
0000 - аа аа аа аа аа аа аа аа -аа аа аа аа аа аа аа ааа ................
0010 - аа аа аа аа аа аа аа аа аа аа аа аа аа аа аа аа аа. .............
ключ: 32
0000 - 01 23 45 67 89 01 23 45-67 89 01 23 45 67 89 01. # Например. . # Например .. # Например ..
0010 - 01 23 45 67 89 01 23 45-67 89 01 23 45 67 89 01. # Например: # Например .. # Например ..
IV: 16
0000 - 01 23 45 67 89 01 23 45-67 89 01 23 45 67 89 01. # Например .. # Например .. # Например ..
Длина теста шифра: 32
0000 - 54 e c e9 2 c 80 a7 9f 79-6f 10 a5 d0 a7 1d ea 5a T .., ... yo ...... Z
0010 - f8 0a 3f b2 2 c c5 a4 16-b0 48 5b d c 5 c 62 91 50 ..?., .... H [. \ BP
Расшифровано текст:
0000 - аа аа аа аа аа аа аа аа-аа аа аа аа аа аа аа аа ................
0010 - аа аа аа аа аа аа аа-а-а-а-а-а-а-а-а-а-а ............…
открытый текст: 63
0000 - аа аа аа аа аа аа аа-а-а-а-а-а-а-а-а-а-а-а-а ................
0010 - аа аа аа аа аа аа аа аа аа-аа аа аа аа аа аа аа аа ................
0020 - аа аа аа аа аа аа аа аа-аа аа аа аа аа аа аа аа аа ... .............
0030 - аа аа аа аа аа аа аа-а-а-а-а-а-а-а-а-а-а-а-я ............…
ключ: 32
0000 - 01 23 45 67 89 01 23 45-67 89 01 23 45 67 89 01. # Например: # Например .. # Например ..
0010 - 01 23 45 67 89 01 23 45-67 89 01 23 45 67 89 01. # Напр. # Напр. # Напр.
iv: 16
0000 - 01 23 45 67 89 01 23 45 -67 89 01 23 45 67 89 01. # Например .. # Например .. # Например ..
Длина теста шифра: 64
0000 - 54 e c e9 2 c 80 a7 9f 79-6f 10 a5 d0 a7 1d ea 5a T .., ... yo ...... Z
0010 - 78 9d b0 6b 88 дБ 0d 5 c -6e 56 df 63 32 18 f2 f0 x..k ... \ nV.c2 ...
0020 - 83 18 ff 1d ae 1a 23 96-7 c 82 93 2e 99 a2 a4 30. ..... #. | ...... 0
0030 - 21 cb db 35 fd cd 7e d8-a3 d3 67 47 ee 0f 86 80! .. 5 .. ~ ... gG ....
Расшифрованный текст:
0000 - аа аа аа аа аа аа аа-аа-а-а-а-а-а-а-а-а-а-я .......... ......
0010 - аа аа аа аа аа аа аа-а-а-а-а-а-а-а-а-а-а-я ................
0020 - аа аа аа аа аа аа аа-а-а-а-а-а-а-а-а-а-а-а ................
0030 - аа аа аа аа aa aa aa aa-aa aa aa aa aa aa ............…
CASE 2 (PT соответствует размеру блока):
aakash@aakash-VirtualBox: ~ / unit_test $ ./tes t
открытый текст: 32
0000 - аа аа аа аа аа аа аа-аа аа аа аа аа аа аа аа ............... .
0010 - аа аа аа аа аа аа аа аа-аа аа аа аа аа аа аа ................
ключ: 32
0000 - 01 23 45 67 89 01 23 45-67 89 01 23 45 67 89 01. # Например .. # Например .. # Например ..
0010 - 01 23 45 67 89 01 23 45-67 89 01 23 45 67 89 01. # Например .. # Например .. # Например ..
iv: 16
0000 - 01 23 45 67 89 01 23 45-67 89 01 23 45 67 89 01. # Например .. # Например .. # Например ..
Длина теста шифра: 48
0000 - 54 e c e9 2 c 80 a7 9f 79-6f 10 a5 d0 a7 1d ea 5a T .., ... йо ...... Z
0010 - 78 9d b0 6b 88 дБ 0d 5 c -6e 56 df 63 32 18 f2 f0 x..k ... \ nV.c2 ...
0020 - fe b2 cf 26 e7 55 94 52-d1 7d 76 62 b6 e9 3a 31 ... &. UR} vb ..: 1
Расшифрованный текст:
0000 - aa aa аа аа аа аа аа-а-а-а-а-а-а-а-а-а-а-а-а ................
0010 - аа аа аа аа аа аа аа аа-аа аа аа аа аа аа аа ................
открытый текст: 64
0000 - аа аа аа аа аа аа аа аа аа аа аа аа аа аа аа аа аа ................
0010 - аа аа аа аа аа аа аа аа-аа аа аа аа аа аа аа аа аа ... .............
0020 - аа аа аа аа аа аа аа-а-а-а-а-а-а-а-а-а-а ... ....
0030 - а-а-а-а-а-а-а-а-а-а-а-а-а-а-а-а-я (я) ................
ключ: 32
0000 - 01 23 45 67 89 01 23 45-67 89 01 23 45 67 89 01. # Например .. # Например .. # Например ..
0010 - 01 23 45 67 89 01 23 45-67 89 01 23 45 67 89 01. # Напр. # Напр. # Напр.
iv: 16
0000 - 01 23 45 67 89 01 23 45-67 89 01 23 45 67 89 01 . # Например .. # Например .. # Например ..
Длина теста шифра: 80
0000 - 54 e c e9 2 c 80 a7 9f 79-6f 10 a5 d0 a7 1d ea 5a T .., ... yo ...... Z
0010 - 78 9d b0 6b 88 дБ 0d 5 c -6e 56 df 63 32 18 f2 f0 x. .k ... \ nV.c2 ...
0020 - 83 18 ff 1d ae 1a 23 96-7 c 82 93 2e 99 a2 a4 30 ...... #. |. ..... 0
0030 - 48 d1 0d 82 c7 57 cd 70-е изд 5f eb 99 59 0f 01 f9 H .... Wp _ .. Y ...
0040 - 2 c f c 2 c 1b a0 df 30 6a-30 49 48 7a 68 cc 37 24,., ... 0j0IHzh.7 $
Расшифрованный текст:
0000 - аа аа аа аа аа аа аа-а-а-а-а-а-а-а-а-а-а-а ................
0010 - аа аа аа аа аа аа аа-а-а-а-а-а-а-а-а-а-а-а-а ................
0020 - аа аа аа аа аа аа аа аа аа-аа аа аа аа аа аа аа ................
0030 - аа аа аа аа аа аа аа аа аа аа аа аа аа аа аа аа аа ........ ........
Случай 3 (PT соответствует размеру блока):
открытый текст: 16
0000 - aa aa aa aa aa aa aa-aa aa aa aa aa aa aa ................
ключ: 32
0000 - 01 23 45 67 89 01 23 45-67 89 01 23 45 67 89 01. # Напр. # Напр. # Напр.
0010 - 01 23 45 67 89 01 23 45-67 89 01 23 45 67 89 01. # Например .. # Например .. # Например ..
iv: 16
0000 - 01 23 45 67 89 01 23 45-67 89 01 23 45 67 89 01. # Например .. # Например .. # Пример ..
Длина теста шифра: 64
0000 - 54 e c e9 2 c 80 a7 9f 79-6f 10 a5 d0 a7 1d ea 5a T .., ... йо ...... Z
0010 - f8 4 c a8 0f fd fb db 79-62 8 c a7 f4 69 d9 47 4d .L ..... yb ... i.GM
0020 - 25 25 86 a3 05 4 c 5f 4d-d5 f8 6d dd 67 54 96 61 %% ... L_M..m.gT.a
0030 - f4 08 a4 78 42 c4 76 98-06 f6 ee 09 d9 07 12 10 ... xB.v .........
Расшифрованный текст:
0000 - аа аа аа аа аа аа аа аа-аа аа аа аа аа аа аа аа ................
0010 - 01 23 45 67 89 01 23 45-67 89 01 23 45 67 89 01. # Напр. # Напр. # Напр.
0020 - 01 23 45 67 89 01 23 45-67 89 01 23 45 67 89 01 . # Например .. # Например .. # Например ..
Кроме того, как отключить заполнение в интерфейсах EVP_ *? Эта функция мало помогает: EVP_CIPHER_CTX_set_padding (ctx, 0);