2009-04-15 5 views
4

Мне нужно зашифровать массив байтов в VB6 и расшифровать его на C# (NET 2.0). И наоборот (C# - VB6).Rijndael/AES от C# до VB6

В C# я использовал класс RijndaelManaged. В VB6 я использовал бесплатные куски из Интернета. Лучше, кажется, http://www.frez.co.uk/freecode.htm#rijndael Но две реализации генерируют различные выходы, начиная с того же входа :(

Может быть, это проблема, связанная с вектором IV в RijndaelManaged ... Я не понимаю ...

Любое решение/опыт использования Rijndael/AES между VB6 и NET Или TripleDES ....

спасибо

UPDATE: ВАЖНО:. машина, где работает VB6 приложение, не имеет NET Framework Поэтому я не могу использовать Interop и/или класс оболочки NET, открытый как COM. :(

+1

Разве вы не можете сделать это наоборот? То есть выставить реализацию VB6 в качестве COM для приложения C#? –

ответ

8

Вы можете использовать interop из .NET для вызова реализации C# из VB6. Таким образом, обе стороны будут использовать одну и ту же библиотеку.

Вот некоторая дополнительная информация: http://msdn.microsoft.com/en-us/library/hfzzah2c(vs.71).aspx

+0

Я второй мистер Барнуэлл - COM Interop тоже будет моим выбором. –

+0

Все остальные мне кажутся кодовыми запахами, но в VB6 есть проблема с потреблением .NET COM-объектов: отладчик запускает и загружает сборки из Program Files как vb6.exe, поэтому отладчик находит ваш COM-объект, если он находится в файлах GAC или Program Files. – flipdoubt

0

Может быть, я дам вам некоторую информацию относительно IV.

Инициализационный вектор - это данные с четким текстом, которые должны генерироваться случайным образом для каждого шифрования, чтобы сделать атаки стереотипов более сложными или невозможными. Разумеется, оба шифра и decrypter ДОЛЖНЫ иметь такое же значение.

Также есть несколько режимов, в которых могут выполняться шифрование и дешифрование. Посмотрите на эту страницу: Wikipedia: Block cipher modes of operation. Вы также должны убедиться, что этот режим одинаковый для обоих из них.

1

Я просто захватил SlowAES, реализацию Javascript AES и встроил его в компонент сценария Windows, который делает его доступным через COM. Затем я смог вызвать компонент из COM-клиентов. Я не пробовал VB6, потому что у меня нет Visual Studio 6. Но для COM-клиентов, которые я пробовал, я нашел, что шифрование полностью совместимо с .NET и классом RijndaelManaged(), когда я использую тот же ключ, IV , режим и ключи.

SlowAES является своего рода ограниченным; Например, я не видел режим ECB. Но материал, который я тестировал, совместим с .NET.

The source for the WSC file is available. Этот источник также включает в себя совместимый с RFC2898 PBKDF2, используемый с VB6. Таким образом, вы можете установить ключ из пароля. Он совместим с классом Rfc2898DeriveBytes в .NET.

См. Также, a related question.

0

VbCorLib теперь поддерживает криптографию, включены Rijndael.

Это бесплатный и .NET-подобный. Ссылка: http://vbcorlib.blogspot.com/