android - 如何在c#中加密文件并在android和IOS上解密

标签 android ios asp.net encryption

我需要创建数据加密的文件。我在 asp.net 应用程序上创建加密数据。

现在我需要在android app和IOS app上读取文件并解密数据。

我可以使用什么类型的加密来为所有类型的客户端提供库?

我使用这段代码进行加密

public static string Encrypt(string plainText, string passPhrase)
    {
        byte[] plainTextBytes = Encoding.UTF8.GetBytes(plainText);
        using (PasswordDeriveBytes password = new PasswordDeriveBytes(passPhrase, null))
        {
            byte[] keyBytes = password.GetBytes(keysize / 8);
            using (RijndaelManaged symmetricKey = new RijndaelManaged())
            {
                symmetricKey.Mode = CipherMode.CBC;
                using (ICryptoTransform encryptor = symmetricKey.CreateEncryptor(keyBytes, initVectorBytes))
                {
                    using (MemoryStream memoryStream = new MemoryStream())
                    {
                        using (CryptoStream cryptoStream = new CryptoStream(memoryStream, encryptor, CryptoStreamMode.Write))
                        {
                            cryptoStream.Write(plainTextBytes, 0, plainTextBytes.Length);
                            cryptoStream.FlushFinalBlock();
                            byte[] cipherTextBytes = memoryStream.ToArray();
                            return Convert.ToBase64String(cipherTextBytes);
                        }
                    }
                }
            }
        }
    }

最佳答案

交叉加解密可以用XOR,很简单

对于 IOS:

+(NSString *) EncryptOrDecrypt:(NSString *)string {

NSString *key=@"Your_Key";

// Create data object from the string
NSData *data = [string dataUsingEncoding:NSUTF8StringEncoding];

// Get pointer to data to obfuscate
char *dataPtr = (char *) [data bytes];

// Get pointer to key data
char *keyData = (char *) [[key dataUsingEncoding:NSUTF8StringEncoding] bytes];

// Points to each char in sequence in the key
char *keyPtr = keyData;
int keyIndex = 0;

// For each character in data, xor with current value in key
for (int x = 0; x < [data length]; x++)
{
    // Replace current character in data with
    // current character xor'd with current key value.
    // Bump each pointer to the next character
    *dataPtr = *dataPtr ^ *keyPtr;
    dataPtr++;
    keyPtr++;

    // If at end of key data, reset count and
    // set key pointer back to start of key value
    if (++keyIndex == [key length])
        keyIndex = 0, keyPtr = keyData;
}

return [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
}

对于安卓:

public static String EncryptOrDecrypt(String input) {
    char[] key = {'K', 'E', 'Y'}; //Your key in char array
    StringBuilder output = new StringBuilder();

    for(int i = 0; i < input.length(); i++) {
        output.append((char) (input.charAt(i) ^ key[i % key.length]));
    }

    return output.toString();
}

对于 C#:

string EncryptOrDecrypt(string text, string key)//Your Key as parameter
{
var result = new StringBuilder();

for (int c = 0; c < text.Length; c++)
    result.Append((char)((uint)text[c] ^ (uint)key[c % key.Length]));

return result.ToString();

加密和解密使用相同的函数,加密和解密必须使用相同的KEY。

关于android - 如何在c#中加密文件并在android和IOS上解密,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34265103/

相关文章:

android - 如何开启特定的第三方 Activity ?

android - 如何在 android studio 中将二进制字符串转换为整数?

ios - 修复 iOS 中的多个按钮单击事件?

ios - 当 UITableViewController 为空时显示 "what' s this? 消息

ASP.NET MVC AJAX Sys 未定义错误

android - 真的没有得到 setResult 和 onActivityResult

android - 如何在命令行上使用-Pandroid.debug.obsoleteApi=true

iOS 应用程序 - 当用户从设备中删除应用程序时进行拦截

c# - 使用 itextsharp 将 HTML 转换为 PDF

c# - 如何在gridview中连续显示图片