有没有人能够使用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#端用相同的密钥解密。
感谢任何帮助,谢谢。
答案 0 :(得分:2)
您可以使用OpenSSL.NET包装器直接在C#中使用OpenSSL!
答案 1 :(得分:1)
需要注意的几件事情:
1-确保正确解释密钥和数据字符串。例如,密钥是用ASCII编码而不是UTF8吗?它可能代表binhex格式吗?
2-您在解密之前没有初始化IV(初始化向量)。它需要匹配你在Cocoa端加密的IV。
答案 2 :(得分:0)
答案 3 :(得分:0)
从Mac到PC来回传输数据的一个经典问题是字节排序。你没有说出Cocoa代码的执行平台是什么,但这是值得注意的,特别是如果它是PowerPC Mac。
答案 4 :(得分:0)
可能与字节序有关,
尝试在解密之前调用Array.Reverse。
var reversedArr = Array.Reverse(toEncrytArray)
byte[] resultArray = cTransform.TransformFinalBlock( reversedArr, 0, reversedArr.Length );
答案 5 :(得分:0)
你也应该发布Cocoa代码,让我们有机会找到你的问题。
但是你发布的内容中隐藏着一些提示:
用密钥和iv解密PyPqLI / d18Q =(base64)给出“97737D09E48B0202”(十六进制)。这看起来像带有PKCS7填充的明文“97737D09E48B”。所以我首先要改变.NET代码以使用PaddingMode.PKCS7并仔细查看将明文传递给Cocoa代码的位置。