【问题标题】:Decrypting data from a secure socket从安全套接字中解密数据
【发布时间】:2010-04-05 23:03:15
【问题描述】:

我正在使用 Java 开发服务器应用程序。我已经成功地通过了通信过程中的握手部分,但是我该如何解密我的输入流呢?以下是我设置服务器的方式:

import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
import java.util.HashMap;

import javax.net.ServerSocketFactory;
import javax.net.ssl.SSLServerSocket;
import javax.net.ssl.SSLServerSocketFactory;

import org.json.me.JSONException;

import dictionary.Dictionary;


public class Server {

    private static int port = 1234;

    public static void main(String[] args) throws JSONException {

        System.setProperty("javax.net.ssl.keyStore", "src/my.keystore");
        System.setProperty("javax.net.ssl.keyStorePassword", "test123");

        System.out.println("Starting server on port: " + port);
        HashMap<String, Game> games = new HashMap<String, Game>();
        final String[] enabledCipherSuites = { "SSL_RSA_WITH_RC4_128_SHA" };

        try{
            SSLServerSocketFactory socketFactory = (SSLServerSocketFactory) SSLServerSocketFactory.getDefault();
            SSLServerSocket listener = (SSLServerSocket) socketFactory.createServerSocket(port);
            listener.setEnabledCipherSuites(enabledCipherSuites);
            Socket server; 

            Dictionary dict = new Dictionary();
            Game game = new Game(dict); //for testing, creates 1 global game.
            while(true){
                server = listener.accept(); 
                ClientConnection conn = new ClientConnection(server, game, "User");
                Thread t = new Thread(conn);
                t.start();  
            }
        }
        catch(IOException e){
            System.out.println("Failed setting up on port: " + port);
            e.printStackTrace();
        }
    }
}

我使用了 BufferedReader 来获取客户端发送的数据:

BufferedReader d = new BufferedReader(new InputStreamReader(socket.getInputStream()));

握手完成后,我似乎正在获取加密数据。我在网上做了一些研究,似乎我可能需要使用密码,但我不确定。有任何想法吗?

【问题讨论】:

标签: java ssl encryption


【解决方案1】:

当底层源是 SSLSocket 时,available() 总是返回 0,而 ready() 总是返回 false。

几乎没有任何正当理由可以使用这些方法中的任何一种。刚读。知道有或没有任何可用数据对您没有任何好处。你仍然需要阅读,所以阅读,你可以免费获得阻塞,而不是必须编码,而不是因为你睡了 1000 毫秒而数据在 1 毫秒后到达而浪费时间,或者因为你做了相反的事情而浪费周期。而且自定义大小的缓冲区大小与可用()返回的内容没有任何好处:只需使用固定大小的缓冲区并将其分配到您的读取循环之外,从而也节省了 GC 周期。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-04-01
    • 2016-03-08
    • 1970-01-01
    • 1970-01-01
    • 2015-06-27
    • 1970-01-01
    • 2011-08-14
    • 1970-01-01
    相关资源
    最近更新 更多