|
Дешифрация AES: чётные вызовы работают, 1 ничего не делает, 3, 5 и т. д. возвращают мусор
|
|||
---|---|---|---|
#18+
Без добавления лишней нечётной дешифрации общий результат не совпадает с оригиналом. При её добавлении -- добавленные фиктивные вызовы № 1, 3, 5 и т. д. возвращают соответственно {}, {мусор}, {мусор} и т. д. Почему так происходит? CryptoStream не предлагать. Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56.
Вывод без фиктивной дешифрации (мусор каждый раз разный) Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
Вывод с фиктивной дешифрацией Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2017, 07:00 |
|
Дешифрация AES: чётные вызовы работают, 1 ничего не делает, 3, 5 и т. д. возвращают мусор
|
|||
---|---|---|---|
#18+
Андрей УсачёвCryptoStream не предлагать. Ох уж эти изобретатели велосипедов... Информация к размышлению: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19.
Выводит CBC, PKCS7, и почему-то 80, а не 64. Почему? Слово padding вам о чем-нибудь говорит? Это дополнение различным способом - в зависимости от режима паддинга - результирующих данных байтами в размере, кратному размеру выходного блока (подробности в гугле). Причем это дополнение делается, даже если суммарный размер закриптованных данных кратен размеру выходного блока. И этот блок с паддингом пишется при вызове CryptoStream.FlushFinalBlock, который вызывается из CryptoStream.Close, который вызывается из Close/Dispose underlying stream. А в CryptoStream.FlushFinalBlock вызывается ICryptoTransform.TransformFinalBlock. А поскольку у AesCryptoServiceProvider по умолчанию Padding=PKCS7 (дополнение байтами, каждый из которых равен количеству дополненных байтов), то вам надо считать блоки, и на последнем вызывать не TransformBlock, а TransformFinalBlock (и учесть, что размер остатка может быть не кратен размеру блока). Аналогично и с декриптованием. А первый вызов при декриптовании возвращает 0 потому, что при первом вызове TransformBlock декриптует данные паддинга, а они никакой исходной информации не содержат. CryptoStream все эти нюансы содержит внутри себя, и избавляет от лишней мороки. Ну, а ваш пример в приведенном виде будет работать при AesCryptoServiceProvider.Mode = CipherMode.CFB и AesCryptoServiceProvider.Padding = PaddingMode.None (и у сервера, и у клиента, разумеется) - при этом длина сообщения не меняется, и блок с паддингом не пишется. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2017, 13:52 |
|
Дешифрация AES: чётные вызовы работают, 1 ничего не делает, 3, 5 и т. д. возвращают мусор
|
|||
---|---|---|---|
#18+
Сон Веры ПавловныОх уж эти изобретатели велосипедов... Сон Веры Павловнывам о чем-нибудь говорит? Ох уж эти хамы! Сон Веры ПавловныАндрей УсачёвCryptoStream не предлагать. Информация к размышлению: Не умеющие читать... Сон Веры Павловны(подробности в гугле) Я спросил тут именно потому, чёрт побери, что устал искать в Гугле. К сожалению, раньше у Майкрософта были более подробные хелпы, чем этот: https://msdn.microsoft.com/en-us/library/system.security.cryptography.icryptotransform.transformblock(v=vs.110).aspx К сожалению, теперь это не так, и приходится копаться в гуглопомойке. Из того, что я прочёл в официальной документации, я сделал вывод, что шифрация и дешифрация абсолютно симметричны, и если при шифрации заполнение не создаётся при вызове TransformBlock, а при вызове TransformFinalBlock создаётся, то и при дешифрации оно должно не обрабатываться при вызове TransformBlock, а при вызове TransformFinalBlock обрабатываться. Разве это не логично? Сон Веры ПавловныИ этот блок с паддингом пишется при вызове CryptoStream.FlushFinalBlock Я же, чёрт побери, просил не писать мне о CryptoStream. С самого начала просил! Надо было добавить "И не спрашивать почему и менторским тоном не просить поменять своё мнение"?! Сон Веры ПавловныНу, а ваш пример в приведенном виде будет работать при AesCryptoServiceProvider.Mode = CipherMode.CFB и AesCryptoServiceProvider.Padding = PaddingMode.None (и у сервера, и у клиента, разумеется) - при этом длина сообщения не меняется, и блок с паддингом не пишется. Почему вы не могли ограничиться ТОЛЬКО этим? Спасибо большое. P. S. Кстати, мне показалось, что "AesCryptoServiceProvider.Mode = CipherMode.CFB" это лишнее. Заглянул в документацию, убрал из кода -- действительно, лишнее. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2017, 12:21 |
|
Дешифрация AES: чётные вызовы работают, 1 ничего не делает, 3, 5 и т. д. возвращают мусор
|
|||
---|---|---|---|
#18+
Андрей УсачёвЯ же, чёрт побери, просил не писать мне о CryptoStream. С самого начала просил! У вас идиосинкразия на почве CryptoStream? Я вовсе не предлагал Вам его использовать - я лишь на его примере показал, что происходит внутри при правильном криптовании. И, кстати, эта информация не является секретной - это всё видно в исходниках (спокойно) CryptoStream. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2017, 12:35 |
|
Дешифрация AES: чётные вызовы работают, 1 ничего не делает, 3, 5 и т. д. возвращают мусор
|
|||
---|---|---|---|
#18+
Сон Веры ПавловныУ вас идиосинкразия на почве CryptoStream? А у вас ананкастное расстройство? Сон Веры ПавловныЯ вовсе не предлагал Вам его использовать - я лишь на его примере показал, что происходит внутри при правильном криптовании. О том, зачем нужен CryptoStream и что в нём происходит, я догадывался до создания этой темы. Ваше объяснение о CryptoStream полностью совпало с моими догадками. Если вам интересно, то одной из причин, почему я не использую CryptoStream, является то, что я декодирую данные прямо в том буфере, куда они поступают в закодированном виде. Сон Веры ПавловныИ, кстати, эта информация не является секретной - это всё видно в исходниках (спокойно) CryptoStream. Большая часть информации, необходимой для программиста, не является секретной. Даже исполняемые файлы можно декомпилировать и изучить. Вопрос только в необходимом для этого времени и в целесообразности. Ещё раз повторю: огромное спасибо вам за то, что вы подсказали мне нужное свойство и нужное его значение. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2017, 14:41 |
|
Дешифрация AES: чётные вызовы работают, 1 ничего не делает, 3, 5 и т. д. возвращают мусор
|
|||
---|---|---|---|
#18+
Андрей УсачёвСон Веры ПавловныУ вас идиосинкразия на почве CryptoStream? А у вас ананкастное расстройство? Нет, у меня циклотимия, и на фазе угнетения я ищу причины поступков людей. Вопрос только в необходимом для этого времени http://referencesource.microsoft.com - все исходники фреймворка. В т.ч. internal и private классов. и в целесообразности Ну, не нужно, так не нужно, не ищите. В конце концов, "кто хочет, тот ищет возможности, кто не хочет — ищет причины" (с). ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2017, 16:44 |
|
Дешифрация AES: чётные вызовы работают, 1 ничего не делает, 3, 5 и т. д. возвращают мусор
|
|||
---|---|---|---|
#18+
Горшочек, не вари! (с) ... |
|||
:
Нравится:
Не нравится:
|
|||
25.09.2017, 09:47 |
|
|
start [/forum/topic.php?fid=20&msg=39525406&tid=1399698]: |
0ms |
get settings: |
11ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
58ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
47ms |
get tp. blocked users: |
1ms |
others: | 15ms |
total: | 169ms |
0 / 0 |