我试图将用C#编写的代码转换为目标c,我试过但无法得到相同的结果.任何帮助都会很明显.
internal static class Common { static string encryptionKey = "0C61L2FSL2F3E7X8E9T1L2F3E4O5"; static byte[] salt = new byte[] {0x49,0x76,0x61,0x6e,0x20,0x4d,0x65,0x64,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,clearBytes.Length); cs.Close(); } clearText = Convert.ToBase64String(ms.ToArray()); } } return clearText; } }
以上代码用于加密.我试图获得RFC2898derivebytes的等效函数.
我试过的客观代码:
-(void)doEncryption { NSString *url = @"www.google.com"; const char salt[] = {0x49,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,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]; }