C#和目标C中的字符串加密
我正在构建一个使用c#web服务的iPhone应用程序。我的c#web服务获取用户详细信息,并根据我的数据库进行验证,并返回xml文件 现在的问题是如何在objective c中加密用户详细信息(用户名和密码各为10个字符)并在c#中解密 我对密码学非常陌生,哪种方法是最好的。是否可以在目标c中加密,在c#中解密C#和目标C中的字符串加密,c#,objective-c,string,cryptography,C#,Objective C,String,Cryptography,我正在构建一个使用c#web服务的iPhone应用程序。我的c#web服务获取用户详细信息,并根据我的数据库进行验证,并返回xml文件 现在的问题是如何在objective c中加密用户详细信息(用户名和密码各为10个字符)并在c#中解密 我对密码学非常陌生,哪种方法是最好的。是否可以在目标c中加密,在c#中解密 谢谢。你的问题很模糊,但简而言之;是的,这是可能的。您需要弄清楚您对加密的期望是什么(高安全性还是高速度?),然后在Objective-C和C#中权衡各种算法的好处及其实现困难。假设您
谢谢。你的问题很模糊,但简而言之;是的,这是可能的。您需要弄清楚您对加密的期望是什么(高安全性还是高速度?),然后在Objective-C和C#中权衡各种算法的好处及其实现困难。假设您加密这些信息是为了通过网络保护它,最好的解决方案是通过SSL进行连接。这将解决问题,而不会在代码中产生新的复杂性。SSL处理通常在.NET和Cocoa中都可用 您尝试加密此数据还有其他原因吗?以下内容来自。这是一个很直接的例子。当然,您必须将加密部分移植到目标C,但只要您使用相同的密钥,它就会生成相同的结果 您需要使用Rijndael密码,该密码可用
我不能谈论Rijndael密码的Objective C实现,但我在一些生产工作的基础上使用了这个(C#)代码,它工作得非常好。我不知道Objective C,但对于C#解密,请查看System.Security.Cryptography中的各种CryptoServiceProvider 下面是我使用TripleDES编写的一个示例:
public class TripleDES
{
private byte[] mbKey;
private byte[] mbIV;
private TripleDESCryptoServiceProvider tdProvider = new TripleDESCryptoServiceProvider();
private UTF8Encoding UTEncode = new UTF8Encoding();
// Key: **YOUR KEY**
// Project IV: **YOUR IV**
public TripleDES(string strKey, string strIV)
{
mbKey = UTEncode.GetBytes(strKey);
mbIV = UTEncode.GetBytes(strIV);
}
public TripleDES()
{
//
// TODO: Add constructor logic here
//
}
public string EncryptToString(string strInput)
{
return Convert.ToBase64String(this.EncryptToBytes(strInput));
}
public byte[] EncryptToBytes(string strInput)
{
byte[] bInput = UTEncode.GetBytes(strInput);
byte[] bOutput = ProcessInput(bInput, tdProvider.CreateEncryptor(mbKey, mbIV));
return bOutput;
}
public string DecryptToString(string strInput)
{
return UTEncode.GetString(DecryptToBytes(strInput));
}
public byte[] DecryptToBytes(string strInput)
{
byte[] bInput = Convert.FromBase64String(strInput);
byte[] bOutput = ProcessInput(bInput, tdProvider.CreateDecryptor(mbKey, mbIV));
return bOutput;
}
private byte[] ProcessInput(byte[] input, ICryptoTransform ctProcessor)
{
MemoryStream memStream = new MemoryStream();
CryptoStream crpStream = new CryptoStream(memStream, ctProcessor, CryptoStreamMode.Write);
crpStream.Write(input, 0, input.Length);
crpStream.FlushFinalBlock();
memStream.Position = 0;
byte[] output;
output = new byte[memStream.Length];
memStream.Read(output, 0, output.Length);
memStream.Close();
crpStream.Close();
return output;
}
}
}感谢您的快速回复。我感谢你的帮助。我发现了一个解释我问题的博客。这里是它的链接 我现在正在实施它。我会很快让你知道情况的 非常感谢..
愉快的编码..SSL(实际上是TLS)绝对是一条出路。对密码学完全陌生的人不应该尝试在产品代码中实现加密系统。做错事很容易让人产生错误的安全感。TLS是一种标准的、跨平台的web流量加密方式,OS X和.NET的实现可能已经得到了非常有能力的人员的验证。
public class TripleDES
{
private byte[] mbKey;
private byte[] mbIV;
private TripleDESCryptoServiceProvider tdProvider = new TripleDESCryptoServiceProvider();
private UTF8Encoding UTEncode = new UTF8Encoding();
// Key: **YOUR KEY**
// Project IV: **YOUR IV**
public TripleDES(string strKey, string strIV)
{
mbKey = UTEncode.GetBytes(strKey);
mbIV = UTEncode.GetBytes(strIV);
}
public TripleDES()
{
//
// TODO: Add constructor logic here
//
}
public string EncryptToString(string strInput)
{
return Convert.ToBase64String(this.EncryptToBytes(strInput));
}
public byte[] EncryptToBytes(string strInput)
{
byte[] bInput = UTEncode.GetBytes(strInput);
byte[] bOutput = ProcessInput(bInput, tdProvider.CreateEncryptor(mbKey, mbIV));
return bOutput;
}
public string DecryptToString(string strInput)
{
return UTEncode.GetString(DecryptToBytes(strInput));
}
public byte[] DecryptToBytes(string strInput)
{
byte[] bInput = Convert.FromBase64String(strInput);
byte[] bOutput = ProcessInput(bInput, tdProvider.CreateDecryptor(mbKey, mbIV));
return bOutput;
}
private byte[] ProcessInput(byte[] input, ICryptoTransform ctProcessor)
{
MemoryStream memStream = new MemoryStream();
CryptoStream crpStream = new CryptoStream(memStream, ctProcessor, CryptoStreamMode.Write);
crpStream.Write(input, 0, input.Length);
crpStream.FlushFinalBlock();
memStream.Position = 0;
byte[] output;
output = new byte[memStream.Length];
memStream.Read(output, 0, output.Length);
memStream.Close();
crpStream.Close();
return output;
}
}