SSCrypto / OpenSSL для C # Crypto - PullRequest
3 голосов
/ 19 ноября 2008

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

Я почти уверен, что моя проблема связана с получением правильных настроек шифрования, но я не очень хорошо разбираюсь в Какао, поэтому не могу точно сказать, какие настройки используются в библиотеке. Однако моя попытка расшифровки выглядит как хеширование 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 );
    }

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

UMldOZh8sBnHAbfN6E / 9KfS1VyWAa7RN

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

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

Ответы [ 6 ]

2 голосов
/ 02 сентября 2009

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

1 голос
/ 19 ноября 2008

Пара вещей, на которые стоит обратить внимание:

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

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

0 голосов
/ 29 января 2009

Вы также должны опубликовать код Какао, чтобы дать нам шанс найти вашу проблему.

Но в том, что вы опубликовали, скрыты некоторые подсказки:

Расшифровка PyPqLI / d18Q = (base64) с помощью ключа и iv дает «97737D09E48B0202» (hex). Это выглядит как открытый текст "97737D09E48B" с отступом PKCS7. Поэтому я бы начал с изменения кода .NET для использования PaddingMode.PKCS7 и внимательно посмотрел, куда вы передаете открытый текст в код Какао.

0 голосов
/ 24 января 2009

Может быть что-то делать с порядком байтов,

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

var reversedArr = Array.Reverse(toEncrytArray)
byte[] resultArray = cTransform.TransformFinalBlock( reversedArr, 0, reversedArr.Length );
0 голосов
/ 23 января 2009

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

0 голосов
/ 19 ноября 2008

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...