2009-04-07 38 views
9

Tôi đang viết một chương trình nhỏ (ứng dụng khách twitter) trong Java, nhằm vào Mac OS X. Là một phần chức năng của nó, nó cần phải có một nơi để lưu trữ tên người dùng twitter/mật khẩu. Nơi tự nhiên sẽ là móc khóa mac, nhưng tôi không thể tìm thấy bất kỳ cách nào để truy cập nó.Lưu trữ tên người dùng/mật khẩu trên máy Mac bằng cách sử dụng Java

Có cách nào truy cập vào móc khóa mac từ Java hay không, gợi ý của bạn về nơi lưu trữ tên người dùng/mật khẩu thay thế là gì?

Trả lời

14

Có API Java keychain, trong đó có triển khai KeyStore trên OS X backed by the keychain.

Tôi nghĩ rằng móc khóa là nơi tốt nhất (nếu không phải là nơi) để lưu trữ mật khẩu. Nó được mã hóa với một thuật toán tốt, người dùng tự do được cho phép hoặc hoang tưởng về tính sẵn có của keychain cho các ứng dụng như họ muốn và mật khẩu sẽ được lưu trữ và cấu hình giống như tất cả các mật khẩu khác mà người dùng lưu trữ.

+0

Tôi thích điều này tốt hơn câu trả lời của Kevin bởi vì đôi khi bạn sẽ không viết một ứng dụng khách twitter và bạn muốn cảnh báo mật khẩu táo hoang tưởng. Hủy hoặc Cho phép. Hủy hoặc Cho phép. (vista gần như đã đúng) – shemnon

+0

Tôi cũng thích cái này vì cùng lý do. –

+1

Có ai đã thử điều này không? Tôi đã làm và có vẻ như bạn không thể lưu trữ một SecretKey với apple.security.KeychainStore - xem mã nguồn. –

4

Tôi chưa thử điều này, nhưng có vẻ như bạn có thể truy cập chuỗi khóa bằng nhà cung cấp mật mã của Apple (com.apple.crypto.provider.Apple), tạo một KeyStore loại KeychainStore.


Được rồi, sau khi một số thử nghiệm, tôi đã có thể truy cập vào mục – chứng tư nhân chủ chốt trong KeychainStore. Tuy nhiên, mật khẩu trong Keychain của tôi không hiển thị (không có bí danh nào được liệt kê) và khi tôi cố thêm KeyStore.SecretKeyEntry (đó là những gì bạn cần để giữ mật khẩu), nó không thành công với thông báo "Khóa không phải là khóa riêng tư ". Rõ ràng, Apple đã không hỗ trợ SecretKeyEntry.

Nếu bạn vẫn muốn bảo vệ mật khẩu Twitter của mình thông qua chuỗi khóa, tôi cho rằng gần nhất bạn có thể tạo cặp khóa RSA, tự ký chứng chỉ và thêm PrivateKeyEntry vào móc khóa. Sau đó, bạn có thể sử dụng cặp khóa để bảo vệ mật khẩu Twitter.

Không khó để ký chứng chỉ, nhưng nếu bạn đi theo tuyến đường đó, bạn có thể muốn xem thư viện BouncyCastle để được trợ giúp.

+0

Thật vậy, nó không hoạt động. Tuy nhiên, nó hoạt động với JCEKS như KeyStore. Để có ví dụ cụ thể, hãy xem http://kingsfleet.blogspot.de/2008/12/storing-password-somewhere-safe.html – hendrik

+0

@hendrik Có, JCEKS đã luôn hỗ trợ 'SecretKeyEntry', nhưng câu hỏi này đặc biệt về cách sử dụng Tính năng "Keychain" của Mac OS. – erickson

+0

Không có mồ hôi, chỉ muốn thêm một số thông tin bổ sung và đồng thời nêu ra vấn đề trên và danh sách cổng Java OSX - ai biết được, có lẽ nó được triển khai tại một số điểm. – hendrik

3

Bạn nên xem trang API twitters trên hỗ trợ OAuth. Bằng cách sử dụng OAuth, bạn không cần phải biết mật khẩu twitter của người dùng.

http://apiwiki.twitter.com/OAuth-FAQ

+0

Thật tuyệt vời! Tôi sẽ phải nhìn vào nó nhiều hơn, nhưng nó có vẻ như là một giải pháp tốt hơn nhiều so với lưu trữ mật khẩu. – Zarkonnen

+0

Rất vui được giúp đỡ. Tôi hy vọng nó làm việc cho bạn. –

+0

Nếu có, bạn sẽ nhận được câu trả lời tốt nhất, rõ ràng. – Zarkonnen

Các vấn đề liên quan