解密用C#加密的Obj-C中的字符串

时间:2018-03-08 16:40:10

标签: c# ios objective-c encryption

我遇到了这个问题,将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 ...

2 个答案:

答案 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和对象数组/集合(NSArrayNSData)的值数组。

如果选择一个值数组(比如unsigned char []或引用unsigned char *),则需要管理内存生存期和释放 - 值数组不会通过(Objective-)C中的值传递,而是通过引用。但是索引操作是直接的。

如果你选择一个Objective-C集合(NSArrayNSData等),那么生命周期和释放将由ARC处理。但是,索引操作需要调用,并且不如您在算法的C#实现中使用的那样灵活。这可能或不重要 - 它将取决于算法。

有一个中间点。您可以分配一个C样式字节缓冲区,然后将其作为NSMutableData将内存管理责任移交给ARC。然后,您可以将unsigned char *恢复到包装的字节并处理掉。

您需要在这些选项之间进行选择,具体取决于字节在程序中的到达方式以及算法需要如何操作它们。但总的来说,简单的答案是,如果你使用C#实现的算法,你可以在Objective-C中以类似的简易/难度来实现。

HTH