次のコードを使用して、キーチェーンからパスワードを取得しています。
-(OSStatus *)getPasswordFromKeyChain:(NSString *)username{
OSStatus status;
const char *cService_name = "Mac App";
UInt32 service_length = strlen(cService_name);
const char *cUser_name = [username cStringUsingEncoding:NSUTF8StringEncoding];
UInt32 username_length = strlen(cUser_name);
void *passwordData = nil;
SecKeychainItemRef itemRef = nil;
UInt32 passwordLength = nil;
status = SecKeychainFindGenericPassword(
NULL, // default keychain
service_length, // length of service name
cService_name, // service name
username_length,// length of account name
cUser_name, // account name
&passwordLength, // length of password
passwordData, // pointer to password data
NULL // the item reference
);
NSLog(@"%s",passwordData);
status = SecKeychainItemFreeContent (NULL, //No attribute data to release
passwordData); //Release data buffer allocated by SecKeychainFindGenericPassword
return status;
}
成功ステータスを取得すると、これは正常に機能します。
しかし、取得したパスワードを印刷しようとすると、次の結果が得られます。パスワードが 6 文字を超えると、実際のパスワードの末尾に文字化けが表示されます。例えば
2012-11-17 12:01:28.731 MAC App[2042:303] sssssss`—~
パスワードが 6 文字以下の場合、正しいパスワードが取得されます。例えば
2012-11-17 12:01:33.244 MAC App[2042:303] ssssss
私の質問は、なぜこれらのゴミの文字が最後に表示されるのですか? この問題を解決するにはどうすればよいですか? アプリケーションで使用するには、このパスワードが必要です。