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#中权衡各种算法的好处及其实现困难。假设您

我正在构建一个使用c#web服务的iPhone应用程序。我的c#web服务获取用户详细信息,并根据我的数据库进行验证,并返回xml文件

现在的问题是如何在objective c中加密用户详细信息(用户名和密码各为10个字符)并在c#中解密

我对密码学非常陌生,哪种方法是最好的。是否可以在目标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;
    }
}