使用Monotouch在钥匙串中存储和读取密码

时间:2011-01-31 14:36:43

标签: xamarin.ios

编辑:问题已解决。为社区做出贡献,我设置了一些帮助方法,并举例说明如何在我的博客上使用它们。在此处找到KeyChain MT example

- 原始问题:

在模拟器和iPad上运行iOS4.2。

我正在尝试使用以下代码存储和读取钥匙串中的密码。我对代码的启发是https://github.com/ldandersen/scifihifi-iphone/,但我无法让它工作。我错过了什么?

// Create a record.
SecRecord o = new SecRecord ( SecKind.GenericPassword );
o.Service = "myService";
o.Label = "myService";
o.Account = "test@test.com";
// The super secret password.
o.Generic = NSData.FromString ( "secret!", NSStringEncoding.UTF8 );
// Add to keychain.
SecKeyChain.Add ( o );

// Now cerate another recored to query what we just saved.  
o = new SecRecord ( SecKind.GenericPassword );
o.Service = "myService";
o.Account = "test@test.com";

// Query as record.         
SecStatusCode code;
var data = SecKeyChain.QueryAsRecord ( o, out code );

// This will tell us "all good!"... 
Console.WriteLine ( code );

// But data.Generic is NULL and this line will crash. :-(
Console.WriteLine ( NSString.FromData ( data.Generic, NSStringEncoding.UTF8 ) );

1 个答案:

答案 0 :(得分:5)

而不是使用SecRecord的{​​{1}}试试这个:

.ValueData

Console.WriteLine(NSString.FromData(data.Generic, NSStringEncoding.ASCIIStringEncoding)); 从存储Generic的位置返回NSData。