Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Java在Mac上存储用户名/密码_Java_Security_Macos_Keychain - Fatal编程技术网

使用Java在Mac上存储用户名/密码

使用Java在Mac上存储用户名/密码,java,security,macos,keychain,Java,Security,Macos,Keychain,我正在用Java编写一个小程序(一个twitter客户端),目标是MacOSX。作为其功能的一部分,它需要有一个存储twitter用户名/密码的地方。自然的地方应该是mac的钥匙链,但我找不到任何访问它的方法 有没有办法从Java访问mac密钥链,或者如果没有,您建议在哪里存储用户名/密码?我还没有尝试过,但看起来您可以通过Apple crypto provider(com.Apple.crypto.provider.Apple)访问密钥链,创建类型为KeychainStore的KeyStore

我正在用Java编写一个小程序(一个twitter客户端),目标是MacOSX。作为其功能的一部分,它需要有一个存储twitter用户名/密码的地方。自然的地方应该是mac的钥匙链,但我找不到任何访问它的方法


有没有办法从Java访问mac密钥链,或者如果没有,您建议在哪里存储用户名/密码?

我还没有尝试过,但看起来您可以通过Apple crypto provider(
com.Apple.crypto.provider.Apple
)访问密钥链,创建类型为
KeychainStore
KeyStore


好的,经过一些实验,我能够访问
KeychainStore
中的私钥-证书条目。但是,我的钥匙链中没有显示密码(没有列出别名),当我尝试添加
密钥库.SecretKeyEntry
(这是您需要保存密码的内容)时,它失败了,并显示消息:“密钥不是私钥”。显然,苹果不支持
SecretKeyEntry

如果您仍然希望通过密钥链保护您的Twitter密码,我认为最接近的方法是生成RSA密钥对,对证书进行自签名,并向密钥链添加
PrivateKeyEntry
。然后,您可以使用密钥对来保护Twitter密码


亲自签署证书并不十分困难,但如果您这样做,您可能需要查看BouncyCastle库以获取帮助。

有Java keychain API,其中有一个在OS X上的实现


我认为钥匙链是储存密码的最好地方(如果不是的话)。它是用一个好的算法加密的,用户可以自由地对应用程序的密钥链的可用性进行许可或偏执,然后密码将与用户存储的所有其他密码一起存储和配置。

您应该看看OAuth支持上的twitters API页面。通过使用OAuth,您不需要知道用户的twitter密码


太棒了!我还需要进一步研究,但这似乎是一个比存储密码好得多的解决方案。如果这样做了,显然你会得到最好的答案。最近的openauth漏洞&Facebook和其他人随后(临时)禁用的openauth漏洞可能会改变你对这种身份验证模式的依赖程度。我仍然建议这是一种首选的身份验证方法,但如果openAuth再次被禁用,您应该考虑如何进行身份验证(并存储凭据)。我更喜欢这一点,而不是Kevin的答案,因为有时您不会编写twitter客户端,您希望看到偏执的apple密码警告。取消或允许。取消或允许。(维斯塔几乎做对了)出于同样的原因,我也喜欢这个。有人试过这个吗?我确实这么做了,但似乎你不能用apple.security.KeychainStore存储SecretKey——请参阅源代码。它很漂亮,但不起作用。请参阅以获取测试代码和RFE。实际上,它不起作用。但是,它使用JCEKS作为密钥库。关于一个粗略的例子,请参见@hendrik Yes,JCEKS一直支持
SecretKeyEntry
,但这个问题是专门关于使用Mac OS的“钥匙链”功能的。没问题,只是想添加一些附加信息,同时在Java OSX端口列表上提出了问题-谁知道,也许它在某个时候得到了实现。