2017-01-31 15 views
-1

Я пытаюсь добиться шифрования AES как в программировании на Java, так и на C++. В принципе, Java отправит зашифрованное сообщение на устройство с программой, написанной на языке C++.PSK5 padding in C++

На стороне Java, чтобы заполнить секретный ключ, который будет шифровать и расшифровывать сообщение, я использовал стиль заполнения PSK5 в режиме ECB. На стороне C++ я пытаюсь добиться того же результата.

Я написал код, и я хотел спросить, хороший ли это подход или я должен попробовать кого-то другого.

string input = "ciao!"; 

char pad[] = {0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08}; 
if(input.length() % 8 != 0) 
{ 
    int missingLength = 8 - (input.length() % 8); 
    for (int i = 0; i<missingLength; i++) 
    { 
     input += pad[missingLength]; 
    } 

} 
+1

Может быть лучше: http://codereview.stackexchange.com/ –

+0

Также массив имеет 9 элементов, и вы выполняете% 8 по всей доске. Это ваше намерение? – efekctive

+0

О, это была ошибка, мое намерение - только от 01 до 08 байтов, которые я хочу добавить к моему ключу, чтобы поместить его. кроме неверно? Я не нашел никакого кода, связанного с этим, и я все еще очень новичок в шифровании. –

ответ

2
  1. Используйте полный размер ключа, 16, 24 или 32 байта. Если ваш ключ короткий или вы используете пароль, используйте функцию деривации ключа, такую ​​как PBKDFG2, чтобы создать защищенный ключ полной длины.
  2. Используйте PKCS5 (PKCS7) для заполнения данных, это должен быть просто вариант, поэтому в вашем коде не должно быть необходимости делать это вручную.

  3. Не используйте режим ЕЦБ, он не является безопасным, см. ECB mode, прокрутите вниз до Пингвина. Вместо этого используйте режим CBC со случайным IV, просто префикс зашифрованных данных с IV для использования в расшифровке, это не обязательно не секретно.

Рассмотрите возможность использования кросс-платформенный/язык решения, такие как RNCryptor, который может предоставить ключ вывод, а также проверку подлинности.

+0

Я не уверен, совместим ли RNCryptor с платой arduino, но я посмотрю. И извините, мой вопрос не был связан с ключом, но, как вы сказали, данные. Mine - простой пример, мое шифрование не обязательно должно быть чрезвычайно безопасным. Я просто хотел попробовать и получить тот же алгоритм, который использует Java в режиме шифрования ECB/PKCS5. Я хотел добиться того же результата в своей программе на C++, так как это расшифрует сообщение. Насколько вы знаете, знаете ли вы какую-нибудь библиотеку, которая может это сделать для меня и совместима с ардуином? Или я могу написать код для достижения того же результата. –

1

Секретные ключи вообще не заполняются. Если что-либо заполнено, это сообщение открытого текста (не обманываемое словом plaintext, AES работает с битами/байтами).

PKCS # 5 padding, или - для блочного шифрования с размером блока 128 бит - скорее PKCS # 7 padding всегда прокладывает открытый текст. Это позволяет шифровать любое текстовое сообщение, даже если оно заканчивается байтами, которые могут быть интерпретированы как байты заполнения.

Мне кажется, что вы должны использовать ранее созданную библиотеку, такую ​​как OpenSSL Crypto ++, а не создавать свои собственные.

+0

Благодарим вас за ответ. Вы действительно должны извинить меня, я ошибся с моим вопросом. То, что я хотел наложить, на самом деле является «открытым текстом». Из того, что я читал, я думал, что вы могли бы добавить простые символы на основе байтов, которые вам нужно заполнить. Насколько вам известно, Open SSL Crypto ++ будет совместим с платой arduino? И смогу ли я достичь того же результата, что и ECB/PKCS # 5 JAVA? –