#c #padding #crypto
#c #заполнение #crypto
Вопрос:
Я пытался использовать AES в режиме CBC с заполнением PKCS # 7, но результат, похоже, отличается от того, что я получаю от онлайн-программы на веб-сайте AES.
Ответ должен быть 817b c015 a162 57ff 845b fa0c 4dc2 fcbb
, то, что я получаю, было 8fed aeca 2fe9 fa8a 9f35 0468 0258 e80c
Я прочитал руководство по crypto 8.1, и PKCS_PADDING предназначен для PKCS # 5, а не для # 7https://www.cryptopp.com/docs/ref/struct_block_padding_scheme_def.html ?fbclid=IwAR18UIE4hi9Menmm6Pze9GBn4loScIGqyTMDel8HujIUChefuIax4hO1u6k#abea06c498771e8f0ad0fbbc19416a979a622df395c2f0edc35f722d938faaad1f
#include <iostream>
#include <iomanip>
#include <string>
#include "cryptopp/modes.h"
#include "cryptopp/aes.h"
#include "cryptopp/filters.h"
int main(int argc, char* argv[]){
byte key[] = {0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36};
byte iv[CryptoPP::AES::BLOCKSIZE] = {0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30};
std::string plaintext = "Hello World!";
std::string ciphertext;
CryptoPP::AES::Encryption aesEncryption(key, CryptoPP::AES::DEFAULT_KEYLENGTH);
CryptoPP::CBC_Mode_ExternalCipher::Encryption cbcEncryption(aesEncryption, iv);
CryptoPP::StreamTransformationFilter stfEncryptor(cbcEncryption, new CryptoPP::StringSink(ciphertext), CryptoPP::StreamTransformationFilter::PKCS_PADDING);
stfEncryptor.Put(reinterpret_cast<const unsigned char*>(plaintext.c_str()), plaintext.length() 1);
stfEncryptor.MessageEnd();
for (int i = 0; i < ciphertext.size(); i ) {
std::cout << "0x" << std::hex << (0xFF amp; static_cast<byte>(ciphertext[i])) << "n";
}
std::cout << "n";
return 0;
}
Интересно, есть ли какой-нибудь способ использовать AES с PKCS # 7
Комментарии:
1. Также смотрите Фиксацию e8107e9cb8d6 .
Ответ №1:
Поддерживает ли Crypto заполнение PKCS # 7?
ДА. Crypto поддерживает PKCS # 5, который используется с 64-разрядными блочными шифрами. PKCS # 7 используется со 128-битными блочными шифрами, и это поддерживается. Наконец, Crypto также поддерживает заполнение PKCS для больших блочных шифров, таких как 256-битный блок Kalyna и Threefish. Я не уверен, какой стандарт регулирует шифры больших блоков.
Я пытался использовать AES в режиме CBC с заполнением PKCS # 7, но результат, похоже, отличается от того, что я получаю от онлайн-программы на веб-сайте AES.
Вероятно, это проблема с кодировкой веб-приложения.
Для перекрестной проверки результатов следует использовать тестовый вектор. Вот один для AES / CBC из NIST SP800-38A:
key: 2b7e151628aed2a6abf7158809cf4f3c
iv: 000102030405060708090a0b0c0d0e0f
plaintext: 6bc1bee22e409f96e93d7e117393172a ae2d8a571e03ac9c9eb76fac45af8e51
30c81c46a35ce411e5fbc1191a0a52ef f69f2445df4f9b17ad2b417be66c3710
ciphertext: 7649abac8119b246cee98e9b12e9197d 5086cb9b507219ee95db113a917678b2
73bed6b8e3c1743b7116e69e22229516 3ff1caa1681fac09120eca307586e1a7
Интересно, есть ли какой-нибудь способ использовать AES с PKCS # 7
Вас также может заинтересовать режим CBC в Crypto wiki.