過去幾天我一直在玩Bouncy Castle(java),而且我已經達到了相信我可以用Diffie-Hellman交換安全地交換密鑰的程度。加密密鑰交換的同行評審
閱讀了許多帖子,強調了正確實施密碼交換的難度,我希望你對我的工作有誠意。 所有基礎密碼操作都基於Bouncy Castle,因此可能被視爲可靠。
String message = "Hello World";
AESCipher aes_client = new AESCipher(256);
RSACipher rsa_server = new RSACipher(2048);
// (Public key sent over the wire)
RSACipher rsa_client = new RSACipher(rsa_server.getPublicKey().getModulus(),
rsa_server.getPublicKey().getExponent());
// The client encodes his AES key with the RSA public key:
byte[] aes_key = rsa_client.encode(aes_client.getKeyBytes());
byte[] aes_iv = rsa_client.encode(aes_client.getInitializationVector());
// (Data sent back over the wire)
byte[] decoded_aes_key = rsa_server.decode(aes_key);
byte[] decoded_aes_iv = rsa_server.decode(aes_iv);
// The server creates an AES server which uses the client key:
AESCipher aes_server = new AESCipher(decoded_aes_key, decoded_aes_iv);
byte[] encoded_message = aes_client.encode(message.getBytes());
byte[] decoded_message = aes_server.decode(encoded_message);
System.out.println(new String(decoded_message));
這次交流可以認爲是安全嗎?我是否應該堅持使用SSL套接字,儘管它會傷害我的辛苦工作? 預先感謝您的意見!
(順便說一句,我的快活 - 城堡 - 包裝 - 庫是完全開源的,所以才讓我知道如果你想存儲庫的URL)。
可能是一個更好的問題http://codereview.stackexchange.com/ – dbyrne 2011-03-14 18:44:14
我不知道這個網站。感謝您的信息,我會在那裏回答我的問題。 – executifs 2011-03-14 18:47:28
@Executifs,你怎麼知道在中間問題上與男人作鬥爭。您需要一些根證書來驗證服務器公鑰。或者客戶端已經安裝了公鑰? – bestsss 2011-03-14 19:36:43