openssl — алгоритм C ++ DES продолжает генерировать некорректный финальный блок

У меня есть задание для школы, где мне нужно использовать стандартную библиотеку для программирования DES на C ++. Я выполнил большую часть алгоритма, однако последний блок не шифрует должным образом по сравнению с openssl des-cbc, который мы используем для проверки. Все остальные блоки работают правильно, так что я думаю, что это как-то связано с моим заполнением.

void des::get_mes_data(std::string mes_file){
std::ifstream mes_in(mes_file, std::ios::binary);
std::string content;
std::getline(mes_in, content, std::string::traits_type::to_char_type(std::string::traits_type::eof()));

//error seems to be here since last block is the only block affected
if(content.size()%8 != 0) content.append(8-(content.size()%8), 0);
//end error

for(char c : content){
if(c == 0) std::cout<<" NULL "<<std::endl;
else if( c == EOF) std::cout<<" EOF "<<std::endl;
else std::cout<<c;
}
std::string mes_bin="";
for(int i = 0; i < content.size(); i++){
mes_bin += char_to_bin(content[i]);
if(mes_bin.size() == 64){
m_mes_data.push_back(mes_bin);
mes_bin = "";
}
}
}

Я попытался вставить EOF char в конце содержимого перед заполнением нулями, и я также попытался вставить ‘\ r \ n’ перед заполнением 0, а также в соответствии с руководством, которое я использовал здесь http://page.math.tu-berlin.de/~kant/teaching/hess/krypto-ws2006/des.htm но все, что я пробовал, похоже, не исправляет.

Я что-то упускаю, когда дело доходит до заполнения, или есть какой-то специальный символ, который мне нужен для завершения содержимого перед добавлением 0 (nul) в конец?

1

Решение

Спасибо Joker_vD за решение

Проблема возникла из-за неправильного заполнения после openssl PKCS # 5 (или PKCS # 7 в Википедии). Изменяя линию

if(content.size()%8 != 0) content.append(8-(content.size()%8), 0);

в

if(content.size()%8 != 0) content.append(8-(content.size()%8), 8-content.size()%8);
else content.append(8, 8);

Программа начала правильно набивать.

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector