Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/323.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和C+之间通过网络套接字实现混合加密+; 我尝试在2个应用程序之间混合密码实现,一个java和另一个C++。我不依赖文件中的密钥存储,而是尝试通过套接字将密钥作为字节数组发送,并让接收应用程序从字节数组重新创建密钥。沿着 Java:生成公钥/私钥对(RSA) java:将公钥传输到C++应用程序 C++:接收公钥并重新创建 C++:生成会话密钥(对称,AES)并使用收到的公钥进行加密 C++:传输加密的会话密钥 Java:接收会话密钥并使用RSA密钥对的私钥解密_Java_C++_Sockets_Encryption_Hybrid - Fatal编程技术网

Java和C+之间通过网络套接字实现混合加密+; 我尝试在2个应用程序之间混合密码实现,一个java和另一个C++。我不依赖文件中的密钥存储,而是尝试通过套接字将密钥作为字节数组发送,并让接收应用程序从字节数组重新创建密钥。沿着 Java:生成公钥/私钥对(RSA) java:将公钥传输到C++应用程序 C++:接收公钥并重新创建 C++:生成会话密钥(对称,AES)并使用收到的公钥进行加密 C++:传输加密的会话密钥 Java:接收会话密钥并使用RSA密钥对的私钥解密

Java和C+之间通过网络套接字实现混合加密+; 我尝试在2个应用程序之间混合密码实现,一个java和另一个C++。我不依赖文件中的密钥存储,而是尝试通过套接字将密钥作为字节数组发送,并让接收应用程序从字节数组重新创建密钥。沿着 Java:生成公钥/私钥对(RSA) java:将公钥传输到C++应用程序 C++:接收公钥并重新创建 C++:生成会话密钥(对称,AES)并使用收到的公钥进行加密 C++:传输加密的会话密钥 Java:接收会话密钥并使用RSA密钥对的私钥解密,java,c++,sockets,encryption,hybrid,Java,C++,Sockets,Encryption,Hybrid,此时,这两个应用程序将拥有对称密钥,并继续使用它进行加密和解密以交换流量。我的问题在第三步。在以字节数组形式接收公钥时,我无法成功地重新创建它 爪哇 C++ if(m_socket->bytesavable()>8) { int len=m_socket->bytesavable(); QByteArray encryptArray=m_socket->readAll(); encryptArray.resize(len); QByteArray clientPublic=encryptArra

此时,这两个应用程序将拥有对称密钥,并继续使用它进行加密和解密以交换流量。我的问题在第三步。在以字节数组形式接收公钥时,我无法成功地重新创建它

爪哇

C++

if(m_socket->bytesavable()>8)
{
int len=m_socket->bytesavable();
QByteArray encryptArray=m_socket->readAll();
encryptArray.resize(len);
QByteArray clientPublic=encryptArray.toBase64();
clientPublic.prepend(“----开始公钥------\n”);
clientPublic.append(“\n-----结束公钥------\n”);
QSSLCertificateClientCert(clientPublic);
QSslKey sslKey(clientPublic,QSsl::Rsa,QSsl::Pem,QSsl::PublicKey,“testtest”);

qDebug()这个算法的问题是Java应用程序无法确定它正在与正确的机器通信。如果第2步中的消息被截获,那么连接可能会被劫持,而Java应用程序无法检测到它。它看起来不像crypto++,它看起来像Qt。公钥不是证书。最后y、 看起来您试图手动执行ssl。此系统实际上不安全。我认为,您是在浪费时间,应该只使用TLS。谢谢或回复。我在其他地方读到过不建议实现您自己的库,但我一直认为这意味着实现您自己的库。利用现有库在Java和Crypto++中,然后实现您自己的方案,我认为这是可能的。如果这不是推荐的做法,它们的预期目的是什么?
GenerateSymmetricKey genSymKey;
private static PrivateKey privateKey;
private static PublicKey publicKey;

public static void main(String[] args) throws NoSuchAlgorithmException, NoSuchProviderException {
    // Generate public/private key pair
    GenerateKeys sk = new GenerateKeys(1024);
    sk.createKeys();
    privateKey = sk.getPrivateKey();
    publicKey = sk.getPublicKey();

    String server = "localhost";
    int port = 8083;

    try {

        // Establish socket connection
        InetAddress serverAddress = InetAddress.getByName(server);
        Socket serverConnection = new Socket(serverAddress, port);

        // Setup output streams
        OutputStream os = serverConnection.getOutputStream();

        os.write(publicKey.getEncoded());
        os.flush();
if ( m_socket->bytesAvailable() > 8)
{
    int len =  m_socket->bytesAvailable();
    QByteArray encryptArray = m_socket->readAll();
    encryptArray.resize(len);

    QByteArray clientPublic = encryptArray.toBase64();
    clientPublic.prepend("-----BEGIN PUBLIC KEY-----\n");
    clientPublic.append("\n-----END PUBLIC KEY-----\n");

    QSslCertificate clientCert(clientPublic);
    QSslKey sslKey(clientPublic, QSsl::Rsa, QSsl::Pem, QSsl::PublicKey, "testtest");

    qDebug() << "Client sslKey: " << sslKey.isNull();