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

fan*_*ard 27 iphone keychain ios

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

谢谢.

Mar*_*ark 39

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

编辑:如果你想快速验证这个答案,我建议尝试在钥匙串中存储长度为16,777,110的字符串,然后尝试长度为16,777,111的字符串.如果第一个工作而第二个不工作,这个答案是正确的.

  • 顺便说一句,16777110 字节 ~= 16 MB (4认同)

Sha*_* TK 18

这很难回答:)它应该支持NSString的最大长度

所以Keychain字符串可以容纳超过42亿个字符,与NSString相同

  • 根据[Mark的回答](http://stackoverflow.com/a/24165635/199364),通过实验测试产生了一个更低的限制. (3认同)
  • 这是一个非常大的钥匙串 (2认同)

use*_*368 7

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

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