基于java与C++的网络socket混合密码实现
我尝试在2个应用程序之间混合密码实现,一个java和另一个C++。我不依赖文件中的密钥存储,而是尝试通过socket将密钥作为字节数组发送,并让接收应用程序从字节数组重新创建密钥。沿着- Java:生成公钥/私钥对(RSA)
- C++:接收公钥并重新创建
- C++:生成会话密钥(对称,AES)并使用收到的公钥进行加密
- C++:传输加密的会话密钥
- Java:接收会话密钥并使用RSA密钥对的私钥解密
此时,这两个应用程序将拥有对称密钥,并继续使用它进行加密和解密以交换流量。我的问题在第三步。在以字节数组形式接收公钥时,我无法成功地重新创建它
爪哇
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();
C++
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();
sslkey始终为空。我在C++的边上使用了密码+ +。这能做到吗?我看到的例子是将密钥保存到文件中,而不是通过网络传输
共 (0) 个答案