Keychain中存储的字符串是否有长度限制?

时间:2012-11-21 08:05:08

标签: iphone ios keychain

我想在iOS上的Keychain中将一些userinfo存储为字符串,那么Keychain中的字符串是否有任何长度限制?

感谢。

3 个答案:

答案 0 :(得分:38)

我把一个iOS应用程序放在一起,使用this library进行二进制搜索,以便与钥匙串进行交互,并确定我能存储的最多的是一个长度为16,777,110的NS(Mutable)字符串。因此明显小于NSString的最大长度或其他答案中建议的默认值SQLITE_MAX_LENGTH。

编辑:如果您想快速验证这个答案,我建议您尝试在密钥链中存储长度为16,777,110的字符串,然后尝试长度为16,777,111的字符串。如果第一个有效,第二个没有,这个答案是正确的。

答案 1 :(得分:18)

很难回答:)它应该支持NSString

的最大长度

因此Keychain字符串可以容纳 42亿字符,与NSString相同

答案 2 :(得分:7)

iOS的钥匙串被实现为SQLite数据库(例如,参见here)。因此,存储在SQLite数据库中的字符串的最大长度可以是钥匙串中字符串的最大长度的上限。

根据 sqlite.org 上的this page,字符串或BLOB的最大字节数受预处理器宏 SQLITE_MAX_LENGTH 的限制,其默认值是 10 ^ 9 。因此,假设字符串的16位编码,字符串的最大长度将是该值的一半。但是,Apple可能会使用 SQLITE_MAX_LENGTH 的较低值。