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

您可以通过OpenSSL.NET包装器直接在 C# 中使用 OpenSSL !

于 2009-09-02T12:45:53.097 回答
1

有几点需要注意:

1-确保您正确解释了键和数据字符串。例如,密钥是用 ASCII 编码而不是 UTF8 编码的吗?它是否可能以 binhex 格式表示?

2-在解密之前您没有初始化 IV(初始化向量)。它需要与您用于在 Cocoa 端加密的 IV 相匹配。

于 2008-11-19T01:48:31.473 回答
0

可能与字节顺序有关,

尝试在解密之前调用 Array.Reverse。

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

您也应该真正发布 Cocoa 代码,让我们有机会找到您的问题。

但是您发布的内容中隐藏了一些提示:

使用密钥和 iv 解密 PyPqLI/d18Q= (base64) 得到“97737D09E48B0202”(十六进制)。这看起来像带有 PKCS7 填充的纯文本“97737D09E48B”。因此,我将首先更改 .NET 代码以使用 PaddingMode.PKCS7 并仔细查看将明文传递给 Cocoa 代码的位置。

于 2009-01-29T17:54:41.817 回答
0

IIRC,OpenSSL 使用 MS 所称的 PKCS7 填充(尽管 OpenSSL 将其称为 PKCS5,但我没有足够的标准知识来关心为什么)。

于 2008-11-19T01:49:39.663 回答
0

从 Mac 到 PC 来回移动数据的经典问题之一是字节顺序。你没有说 Cocoa 代码的执行平台是什么,但这是需要注意的,特别是如果它是 PowerPC Mac。

于 2009-01-22T21:04:24.993 回答