SSCrypto / OpenSSL в C # Crypto

Кто-нибудь мог использовать SSCrypto Framework для Cocoa для шифрования текста, а затем расшифровать его в C # /. NET? Или может кто-нибудь предложить некоторые рекомендации?

Я почти уверен, что моя проблема связана с правильной настройкой криптографических настроек, но я не уверен в использовании Cocoa, поэтому я не могу сказать, какие настройки используются в библиотеке. Однако моя попытка расшифровать его выглядит как хеширование md5, режим CBC, заполнение нулями, и я понятия не имею, установлен ли IV или нет ...

Мой код C # выглядит так:

        public static string Decrypt( string toDecrypt, string key, bool useHashing )
    {
        byte[] keyArray;
        byte[] toEncryptArray = Convert.FromBase64String( toDecrypt );

        if( useHashing )
        {
            MD5CryptoServiceProvider hashmd5 = new MD5CryptoServiceProvider();
            keyArray = hashmd5.ComputeHash( UTF8Encoding.UTF8.GetBytes( key ) );
            hashmd5.Clear();
        }
        else
            keyArray = UTF8Encoding.UTF8.GetBytes( key );

        TripleDESCryptoServiceProvider tdes = new TripleDESCryptoServiceProvider();
        tdes.Key = keyArray;
        tdes.Mode = CipherMode.CBC;
        tdes.Padding = PaddingMode.Zeros;

        ICryptoTransform cTransform = tdes.CreateDecryptor();
        byte[] resultArray = cTransform.TransformFinalBlock( toEncryptArray, 0, toEncryptArray.Length );

        tdes.Clear();

        return UTF8Encoding.UTF8.GetString( resultArray );
    }

Когда я запускаю шифрование на стороне Cocoa, я получаю зашифрованный текст:

UMldOZh8sBnHAbfN6E / 9KfS1VyWAa7RN

но это не будет расшифровывать на стороне C # с тем же ключом.

Любая помощь приветствуется, спасибо.

c#,.net,cocoa,encryption,openssl,

3

Ответов: 6


2

Вы можете использовать OpenSSL непосредственно в C # с оберткой OpenSSL.NET !


1

Несколько вещей, на которые следует обратить внимание:

1- Убедитесь, что вы правильно интерпретируете строку ключа и данных. Например, это ключ, закодированный в ASCII вместо UTF8? Возможно ли это в формате binhex?

2- Вы не инициализируете IV (вектор инициализации) перед расшифровкой. Он должен соответствовать IV, который вы используете, для шифрования на стороне Cocoa.


0

IIRC, OpenSSL использует то, что MS называет дополнением PKCS7 (хотя OpenSSL относится к нему как PKCS5, и мне не хватает стандартного выигрыша, чтобы заботиться о том, почему).


0

Один из классических вопросов при перемещении данных с Mac на ПК - это порядок байтов. Вы не сказали, что платформа исполнения для кода Cocoa, но это то, что нужно посмотреть, особенно если это PowerPC Mac.


0

Может быть, что-то связано с контентом,

Попробуйте вызвать Array.Reverse перед расшифровкой.

var reversedArr = Array.Reverse(toEncrytArray)
byte[] resultArray = cTransform.TransformFinalBlock( reversedArr, 0, reversedArr.Length );
C # ,. сеть, какао, шифрование, OpenSSL,
Похожие вопросы