2013-08-21 45 views
1

我有下面的ObjC方法,我想調用它將其移植到託管代碼,但不知道從哪裏開始。有人可以協助嗎?CCKeyDerivationPBKDF如何轉換爲Xamarin.iOS?

- (NSData *)deriveKey 
{ 
    NSData *passphrase = [self.passwordField.stringValue dataUsingEncoding:NSUTF8StringEncoding]; 
    NSData *salt = [self.saltField.stringValue dataUsingEncoding:NSUTF8StringEncoding]; 
    NSMutableData *key = [NSMutableData dataWithLength:kCCKeySizeAES256]; 
    CCKeyDerivationPBKDF(kCCPBKDF2, 
         [passphrase bytes], 
         [passphrase length], 
         [salt bytes], 
         [salt length], 
         kCCPRFHmacAlgSHA256, 
         PBKDFNumberOfRounds, 
         [key mutableBytes], 
         [key length]); 
    return key; 
} 

回答

1

在.NET PKCS#5V2(定義PBKDF2)支持可使用Rfc2898DeriveBytes。但是它不會讓您選擇散列算法。

var salt = new byte [32]; // do not use it empty :) 
var key = new Rfc2898DeriveBytes ("passphrase", salt, 1000).GetBytes (length); 
+0

我知道一個。忘了提及它。它根據文檔使用SHA1,所以它沒有任何幫助。任何機會我可以調用本地方法? – Krumelur

+0

'CCKeyDerivationPBKDF'是一個** C ** API,您需要p /調用它。另一種方法是複製/粘貼Mono的'Rfc2898DeriveBytes'源代碼並使其適用於任何'HashAlgorithm'(或硬編碼到'SHA256')。以前更容易,後來更有用於跨平臺支持。 – poupou

+0

而託管密鑰的結果與本機相同嗎? – Krumelur