Я пытаюсь преобразовать код, написанный на C#, в объектив c, я попытался, но не смог получить тот же результат. Любая помощь будет заметна.Код C# для Objective C Эквивалентный код
internal static class Common {
static string encryptionKey = "0C61L2FSL2F3E7X8E9T1L2F3E4O5";
static byte[] salt = new byte[] {0x49, 0x76, 0x61, 0x6e, 0x20, 0x4d, 0x65, 0x64, 0x76, 0x65, 0x64, 0x65, 0x76};
internal static string Encrypt(string clearText)
{
byte[] clearBytes = Encoding.Unicode.GetBytes(clearText);
using (Aes encryptor = Aes.Create())
{
Rfc2898DeriveBytes pdb = new Rfc2898DeriveBytes(encryptionKey, salt);
encryptor.Key = pdb.GetBytes(32);
encryptor.IV = pdb.GetBytes(16);
using (MemoryStream ms = new MemoryStream())
{
using (CryptoStream cs = new CryptoStream(ms, encryptor.CreateEncryptor(), CryptoStreamMode.Write))
{
cs.Write(clearBytes, 0, clearBytes.Length);
cs.Close();
}
clearText = Convert.ToBase64String(ms.ToArray());
}
}
return clearText;
}
}
выше код используется для encrytion. Я попытался получить эквивалентные функции в объекте для RFC2898derivebytes.
Objective C код, который я пробовал:
-(void)doEncryption {
NSString *url = @"www.google.com";
const char salt[] = {0x49, 0x76, 0x61, 0x6e, 0x20, 0x4d, 0x65, 0x64, 0x76, 0x65, 0x64, 0x65, 0x76};
NSData *saltData =[NSData dataWithBytes:salt length:13];
NSData* myPassData = [EncryptionKey dataUsingEncoding:NSUTF8StringEncoding];
unsigned char key[32];
CCKeyDerivationPBKDF(kCCPBKDF2, myPassData.bytes, myPassData.length, saltData.bytes, saltData.length, kCCPRFHmacAlgSHA1, 1000, key, 32);
unsigned char InitialVector[16];
CCKeyDerivationPBKDF(kCCPBKDF2, myPassData.bytes, myPassData.length, saltData.bytes, saltData.length, kCCPRFHmacAlgSHA1, 1000, InitialVector, 16);
NSString *Aeskey = [[NSString alloc] initWithBytes:key length:sizeof(key) encoding:NSUnicodeStringEncoding];
NSLog(@"Key AES : %@",Aeskey);
NSString *AesIV = [[NSString alloc] initWithBytes:InitialVector length:sizeof(key) encoding:NSASCIIStringEncoding];
NSString *encryptedString = [AESCrypt encrypt:url password:Aeskey andIV:AesIV];
[self doDecryption:encryptedString withKey:nil];
}
Хороший вопрос !! – ManiaChamp
@ManishSharma Очень хорошо поставлен, и я тоже не вижу слишком плохого в коде - за исключением, конечно, того, что я делаю в своем ответе. –