我遇到了这个问题,将C#中的byte []转换为Objective-C中的某种数据类型。如果它是C#中的byte [],那么在Obj-C中它应该是什么; const char,unsigned char,NSMutableData,NSMutableArray等...无论它采用什么数组格式,它都需要具有NSMutableData所具有的某种.Length属性,但在这篇文章中似乎可以找到直接的一对一转换:{{ 3}}
最终,C#加密过程中有超过10种方法可能需要复制以解密通过SOAP Web服务XML属性发送的密码。一般来说这是可能的吗?使用SHA散列在C#中加密的密码然后通过Objective-C解密?
编辑因为DOWNVOTES
编辑更清晰,但是我不打算在SO上“发布我的加密逻辑”,所以我试图在不解释步骤的情况下解释这些步骤?
基本上pw字符串是AES128加密然后这个,但我的基本问题仍然存在;如果Obj-C方法按照确切的顺序模仿C#方法,其中包括使用密钥的解密逻辑和也经过哈希处理的iv,那么它在C#端工作,这在理论上是否有效?或者这是不可能的?
试图弄清楚我是否需要从C#dll导入dyLib到我的proj ...
答案 0 :(得分:1)
正如@Plutonix所说,散列不是加密。哈希的主要目标是不应该反转哈希。您可以使用rainbow tables尝试获取原始值。
Here是彩虹表的列表,您可以在其中找到SHA。
答案 1 :(得分:1)
如果它按照确切的顺序模仿C#方法,其中包括带有密钥的解密逻辑和也经过哈希处理的iv,那么它在C#端是可行的,那么这可能永远不会起作用吗?
假设你的意思是“可以工作”,那么答案是肯定的,你的C#代码很少能做到你无法在Objective-C中编码。因此,如果您在C#中获得了解密算法,那么在Objective-C(以及许多其他语言)中实现它应该不会太难。
我遇到了这个问题,将C#中的byte []转换为Objective-C中的某种数据类型。如果它是C#中的byte [],那么在Obj-C中它应该是什么; const char,unsigned char,NSMutableData,NSMutableArray等......
这是您的关键问题,为Obj-C中的算法选择最佳类型。您的C#byte[]
是值数组,Objective-C包含来自C和对象数组/集合(NSArray
,NSData
)的值数组。
如果选择一个值数组(比如unsigned char []
或引用unsigned char *
),则需要管理内存生存期和释放 - 值数组不会通过(Objective-)C中的值传递,而是通过引用。但是索引操作是直接的。
如果你选择一个Objective-C集合(NSArray
,NSData
等),那么生命周期和释放将由ARC处理。但是,索引操作需要调用,并且不如您在算法的C#实现中使用的那样灵活。这可能或不重要 - 它将取决于算法。
有一个中间点。您可以分配一个C样式字节缓冲区,然后将其作为NSMutableData
将内存管理责任移交给ARC。然后,您可以将unsigned char *
恢复到包装的字节并处理掉。
您需要在这些选项之间进行选择,具体取决于字节在程序中的到达方式以及算法需要如何操作它们。但总的来说,简单的答案是,如果你使用C#实现的算法,你可以在Objective-C中以类似的简易/难度来实现。
HTH