#c# #network-programming #rsa
Вопрос:
я работаю над тестом для подписи и проверки подписей, и вместо того, чтобы подписывать и отправлять его, он просто выдает ошибку, вот код подписи (не включая проверку сервера, поскольку он не имеет значения и слишком длинный) и код замены ключей.
Вот сервер:
// variables
byte[] bytesFrom = new byte[8192];
// initialize network stream
NetworkStream networkStream = clientSocket.GetStream();
// send length of public key
networkStream.Write(Encoding.UTF8.GetBytes(Convert.ToBase64String(rsa.ExportRSAPublicKey()).Length.ToString()));
// send public key
networkStream.Write(Encoding.UTF8.GetBytes(Convert.ToBase64String(rsa.ExportRSAPublicKey())));
// read public key length
networkStream.Read(bytesFrom);
// apply public key length
bytesFrom = new byte[int.Parse(Encoding.UTF8.GetString(bytesFrom))];
// read public key
networkStream.Read(bytesFrom);
// import public key
int a;
rsa.ImportRSAPublicKey(rsa.Decrypt(bytesFrom, RSAEncryptionPadding.OaepSHA512), out a);
Вот клиент:
// initialize RSA and connect
RSA rsa = RSA.Create();
IPEndPoint end = new IPEndPoint(IPAddress.Loopback, 500);
Socket sock = new Socket(end.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
sock.Connect(end);
NetworkStream ns = new NetworkStream(sock);
byte[] buffer = new byte[8192];
// read public key length
ns.Read(buffer);
// apply public key length
buffer = new byte[int.Parse(Encoding.UTF8.GetString(buffer))];
// read public key
ns.Read(buffer);
// apply public key
int a;
rsa.ImportRSAPublicKey(buffer, out a);
// send public key length and public key
ns.Write(Encoding.UTF8.GetBytes(rsa.ExportRSAPublicKey().Length.ToString()));
ns.Write(rsa.ExportRSAPublicKey());
// send signed "h"
ns.Write(Encoding.UTF8.GetBytes(rsa.SignData(Encoding.UTF8.GetBytes("h"), HashAlgorithmName.SHA256, RSASignaturePadding.Pkcs1).Length.ToString()));
ns.Write(rsa.SignData(Encoding.UTF8.GetBytes("h"), HashAlgorithmName.SHA256, RSASignaturePadding.Pkcs1));
Ответ №1:
Я обнаружил, что все, что мне нужно, — это временно сбросить закрытый ключ, пока я переключаю ключи, а затем в конце концов импортировать его обратно.