我需要创建加密数据的文件。我在asp.net app上创建加密数据。
现在我需要在Android应用程序和IOS应用程序上读取文件并解密数据。
我可以使用哪种类型的加密,它将为所有类型的客户端提供库?
用于编码我使用此代码
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);
}
}
}
}
}
}
答案 0 :(得分:2)
鉴于加密知识水平,最好的办法是使用RNCryptor。它适用于多种语言,包括Objective-C和C#。
RNCryptor处理成功安全加密所需的所有详细信息,例如密钥派生,身份验证和版本控制。对于那些不熟悉使用加密的人来说,这一切都是正确的。
保护密钥仍然是一个难题。使用钥匙串存储密钥是最佳做法。问题是如何在应用程序和服务器之间共享密钥,如果它被编译到应用程序中,这是一个几乎无法克服的主要弱点。
答案 1 :(得分:2)
对于交叉加密和解密,您可以使用XOR.Its非常简单。
对于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];
}
对于Android:
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();
}
使用相同的功能进行加密和解密。您必须使用相同的密钥进行加密和解密。
答案 2 :(得分:1)
看一下这个框架https://github.com/RNCryptor/RNCryptor - 它提供了一种跨平台的加密/解密方式。