用C#加密字符串,并在iOS和Android上解密

用C#加密字符串,并在iOS和Android上解密,c#,.net,C#,.net,我正在用C#和.NET Framework 4.0开发一个WCF Web服务。我还在开发一个iOS和Android客户端来连接它 在服务器端,我必须生成一个验证密码,对其进行加密,然后将其发送回iOS客户端或Android客户端 我不知道如何用.NET Framework加密字符串。在互联网上搜索,我发现有一些算法可以做到这一点:MD5、RSA等(我不确定我是否理解如何加密字符串,因为我还没有做过字符串加密) 如果我使用MD5加密密码,那么在iOS和Android上我需要做什么才能解密密码 你给

我正在用C#和.NET Framework 4.0开发一个WCF Web服务。我还在开发一个iOS和Android客户端来连接它

在服务器端,我必须生成一个验证密码,对其进行加密,然后将其发送回iOS客户端或Android客户端

我不知道如何用.NET Framework加密字符串。在互联网上搜索,我发现有一些算法可以做到这一点:MD5、RSA等(我不确定我是否理解如何加密字符串,因为我还没有做过字符串加密)

如果我使用MD5加密密码,那么在iOS和Android上我需要做什么才能解密密码


你给我推荐什么?

在.Net中加密字符串很容易。您可以使用内置的System.Security.Cryptography.MD5

这里有一个链接:

关于语言间的加密/解密,这里有一个与您非常相似的问题。。姆凡托有一个很好的答案


在.net中创建关键字的md5哈希很容易:

MD5 hashKey = new MD5CryptoServiceProvider();
var hashedKey = hashKey.ComputeHash(ASCIIEncoding.ASCII.GetBytes("password"));
注意:散列键是字节数组,您可以从中构建字符串或进一步加密(例如,更改为数字,将其转换为十六进制…)。您需要
使用System.Security.Cryptography


在Ios/Android上,你必须做同样的事情,用MD5算法加密字符串(这也是为什么它工作的原因),然后比较两个结果。

问题是你的加密必须有多严重?MD5不是一件严肃的事情。至于RSA,您应该考虑到这是一种asyn加密方法,它使用一对公钥和私钥。根据您的目标,可以判断RSA是否适合您。当然,如果您开发了严重的问题,请不要使用公共库进行加密(包括MS)。

我使用CommonCrypto编写了RSA和AES实现,实现是为了与.NET互操作

看看


谢谢你的回答,但我找不到类似的问题在哪里。@VansFannel抱歉,忘了发布链接:(加密在.net中相当困难。它只提供低级功能。很难将这些功能组合到一个安全方案中。在这种情况下,MD5显然是一个错误的选择。我同意你的观点,但他的问题是如何在.net w/MD5中加密字符串,所以我回答了这个问题。但这至少在四种不同的方面是一个坏主意。1)它很快。你需要使用一个缓慢的迭代方案,如scrypt、bcrypt或PBKDF2。2)它没有salt 3)它会悄悄地破坏非ASCII密码4)虽然MD5在这个上下文中没有被破坏,但还是最好使用一个更强的散列,如SHA-2(作为PBKDF2中的构建块)@CodesInChaos我知道。。。我刚刚发布了一个如何使用md5的示例(这是一个基本问题)。当然,这不可能是包括盐在内的完整溶液,但我同意你在第3点。。。我没想过。使用SSL加密连接。远比您自己构建的任何东西都强大。@CodesInChaos我想在数据库以及iOS和Android设备上存储加密的密码。对于传输,请以SSL格式发送密码(不要忘记验证服务器证书)。对于数据库,使用专门的密码哈希(PBKDF2、bcrypt或scrypt)。有关详细信息,请参阅。在.net中,最简单的哈希是
Rfc2898DeriveBytes
,迭代次数约为20000次,这是PBKDF2-HMAC-SHA-1的一个实现。