2017-01-09 3 views
3

Я занимаюсь разработкой службы в .NET Core 1.1. Он подключается к устаревшей базе данных, в которой хранятся данные, зашифрованные с помощью AES Rjindael. Алгоритм дешифрования использует метод System.Security.Cryptography.PasswordDeriveBytes() для создания IV.Отсутствует метод PasswordDeriveBytes (PBKDF1) в .NET CORE

Похоже, что эта функция не была перенесена в .NET Core, поскольку она устарела. К сожалению, у меня нет возможности заменить устаревшие данные и код, чтобы использовать лучший алгоритм. Так или иначе, мне нужно реализовать реализацию этого алгоритма, чтобы сделать его обратно совместимым.

Любые предложения о том, как реализовать эти алгоритмы? Благодаря!

Update

Принимая ответ Маартен Bodewes, чтобы скопировать моно исходный код, хотя это не было возможным для меня реализовать. Проблема в том, что вам придется перенести большой кусок моно крипто, чтобы заставить его работать. (Я нашел способ избежать использования PasswordDeriveBytes). Спасибо, Маартен!

+2

FWIW PasswordDeriveBytes вернется в netstandard2.0, так что теперь вы можете использовать polyfill, а затем использовать фреймворк, когда он доступен. – vcsjones

ответ

4

Просто возьмите код от Mono, он должен быть в порядке , если вам не требуется больше байтов из PBKDF1 в качестве выхода хеш-функции.

Не забудьте ознакомиться с лицензией на использование Open Source.

+2

Или из .NET Core: http://source.dot.net/#System.Security.Cryptography.Csp/System/Security/Cryptography/PasswordDeriveBytes.cs,0b54c5106dead015 – bartonjs

+0

Хорошее предложение, но, похоже, реализовать большую часть Моно-криптографической системы. В PasswordDeriveBytes используется множество других функций библиотеки. (Я предполагаю, что они оставили это из .NET-ядра, потому что это не простой порт.) – RaoulRubin

+1

Не можете ли вы их скопировать? Он должен заканчиваться где-то ... –

0

PasswordDeriveBytes является устаревшим, используйте вместо Rfc2898DeriveBytes

var pdb = new Rfc2898DeriveBytes(Password, 
      new byte[] {0x49, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 
      0x56, 0x57, 0x58, 0x59, 0x60, 0x61}); 

Но это не поможет вам, когда ваши данные уже были зашифрованы с помощью устаревшей функции, и вы должны расшифровать их.

Смежные вопросы