我正在寻找一种方法将 OS X 钥匙串的内容转储(导出)到我可以在其他地方轻松处理的文件中,例如制表符分隔的纯文本或类似的内容。
钥匙串访问应用程序不提供任何此类功能,获取钥匙的数据需要依次打开每个钥匙串,并且每次都必须输入钥匙串的密码才能查看与钥匙一起存储的密码。
经过一番挖掘,我找到了某人的解决方案,通过使用 AppleScript 和 Keychain Scripting 应用程序来访问钥匙串(无法链接到单个帖子;向下滚动大约三分之二到页面末尾):
http://discussions.apple.com/thread.jspa?threadID=1398759 http://discussions.apple.com/thread.jspa?threadID=1398759
使用钥匙串脚本,您可以访问所有密钥的所有数据字段 - 包括明文密码! – 将这些数据转储到文本文件等中相当容易。我已经测试过它并且运行良好。
但是,此解决方案仍然需要通过单击对话框上的“确定”来确认对每个密钥的访问。这比每次都必须输入钥匙串的密码要好得多,但仍然很烦人。此外,每个密钥都必须确认两次访问;一次用于脚本编辑器(或脚本本身,如果它作为应用程序运行),一次用于钥匙串脚本。因此,如果您要处理包含 100 个钥匙的钥匙串,则必须在 200 个对话框中手动单击“确定”。
我现在正在寻找解决方案来解决这个问题。我意识到,钥匙串的目的是保护敏感数据并防止我试图做的事情,任何这样的解决方案都可能涉及某种黑客攻击。
我对你的想法非常感兴趣!
好吧,我傻了。有一个命令行工具叫做security
它就是这样做的(以及钥匙串上的许多其他操作)。
用法示例:
security dump-keychain -d login.keychain
这会将 login.keychain(用户的默认钥匙串)中的所有数据转储为明文,包括密码。你still必须确认访问,但每个键只需确认一次,并且它比使用 AppleScript 快得多(并且在尝试访问某些字段时不会抛出奇怪的错误)。这不是黑客。
如果没有-d
选项,它将转储除密码之外的所有字段。
密钥的转储数据如下所示(对于互联网密钥;程序密钥和证书具有其他字段,但格式相同):
keychain: "/Users/<username>/Library/Keychains/login.keychain"
class: "inet"
attributes:
0x00000007 <blob>="tech.slashdot.org (<username for this web login>)"
0x00000008 <blob>=<NULL>
"acct"<blob>="<username for this web login>"
"atyp"<blob>="form"
"cdat"<timedate>=0x32303038303432333038323730355A00 "20080423082705Z\000"
"crtr"<uint32>=<NULL>
"cusi"<sint32>=<NULL>
"desc"<blob>="Kennwort des Web-Formulars"
"icmt"<blob>="default"
"invi"<sint32>=<NULL>
"mdat"<timedate>=0x32303038303432333038323730355A00 "20080423082705Z\000"
"nega"<sint32>=<NULL>
"path"<blob>=<NULL>
"port"<uint32>=0x00000000
"prot"<blob>=<NULL>
"ptcl"<uint32>="http"
"scrp"<sint32>=<NULL>
"sdmn"<blob>=<NULL>
"srvr"<blob>="tech.slashdot.org"
"type"<uint32>=<NULL>
data:
"<the plaintext password for this key>"
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)