3

SSCrypto Framework for 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# 側で復号化することはできません。

どんな助けでも大歓迎です、ありがとう。

4

6 に答える 6

2

You could use OpenSSL directly in C# with the OpenSSL.NET wrapper!

于 2009-09-02T12:45:53.097 に答える
1

注意すべき点がいくつかあります。

1- キーとデータ文字列を正しく解釈していることを確認してください。たとえば、鍵は UTF8 ではなく ASCII でエンコードされていますか? 代わりに binhex 形式で表されている可能性がありますか?

2-復号化する前にIV(初期化ベクトル)を初期化していません。Cocoa 側で暗号化に使用している IV と一致する必要があります。

于 2008-11-19T01:48:31.473 に答える
0

You should really post the Cocoa code, too, to give us a chance to find your problem.

But there are some hints hidden in what you have posted:

Decrypting PyPqLI/d18Q= (base64) with the key and iv gives "97737D09E48B0202" (hex). This looks like the plaintext "97737D09E48B" with PKCS7-padding. So I would start by changing the .NET code to use PaddingMode.PKCS7 and look closely at where you pass the plaintext to the Cocoa code.

于 2009-01-29T17:54:41.817 に答える
0

エンディアンと関係があるかもしれませんが、

復号化する前に Array.Reverse を呼び出してみてください。

var reversedArr = Array.Reverse(toEncrytArray)
byte[] resultArray = cTransform.TransformFinalBlock( reversedArr, 0, reversedArr.Length );
于 2009-01-24T01:55:01.927 に答える
0

IIRC、OpenSSL は、MS が PKCS7 パディングと呼んでいるものを使用します (ただし、OpenSSL はそれを PKCS5 と呼んでいますが、その理由を気にするのに十分な標準の専門家ではありません)。

于 2008-11-19T01:49:39.663 に答える
0

Mac と PC の間でデータをやり取りする際の典型的な問題の 1 つは、バイト順です。あなたは、Cocoa コードの実行プラットフォームが何であるかについては言及していませんでしたが、特にそれが PowerPC Mac である場合は注意が必要です。

于 2009-01-22T21:04:24.993 に答える