Zyan 通信框架 - 由于消息被加密,公钥已更改

Posted

技术标签:

【中文标题】Zyan 通信框架 - 由于消息被加密,公钥已更改【英文标题】:Zyan Communication Framework - Public key changed since the message was encrypted 【发布时间】:2015-11-25 09:36:16 【问题描述】:

我正在尝试使用 TCP 双工通道使用Zyan Communication Framework 设置简单的 RPC 客户端/服务器通信,但是当客户端尝试连接到服务器时,我一直收到相同的错误“自消息以来公钥已更改已加密”。

我已在客户端和服务器中明确将加密设置为 false,因此我看不到该错误的原因。

出于演示目的,我设置了一个示例来演示问题

版本:

NET 版本 4.5.2 Zyan 2.6.2
using System;
using System.Threading;
using Zyan.Communication;
using Zyan.Communication.Protocols.Tcp;

namespace ***MinimalSample

    public interface ISampleService
    
        string GetGreeting();
    

    public class SampleService : ISampleService
    
        public string GetGreeting()
        
            return "Hello World";
        
    

    class Program
    
        static void Main(string[] args)
        
            int port = 5252;
            Thread serverThread = new Thread(() =>
            
                var protocol = new TcpDuplexServerProtocolSetup(port)Encryption = false;
                using (var tcpHost = new ZyanComponentHost("TCPCommunication", protocol))
                
                    tcpHost.RegisterComponent<ISampleService, SampleService>();

                    Console.WriteLine("Press [Enter] to exit");
                    Console.ReadLine();
                

            )
            IsBackground = true;
            serverThread.Start();

            Thread clientThread = new Thread(() =>
            
                // Sleep for a while to give time to the server
                Thread.Sleep(5000);

                var protocol = new TcpDuplexClientProtocolSetup(encryption: false);
                var url = protocol.FormatUrl("127.0.0.1", port, "TCPCommunication");

                try
                
                    using (var connection = new ZyanConnection(url))
                    
                        ISampleService proxy = connection.CreateProxy<ISampleService>();
                        string serverMessage = proxy.GetGreeting();

                        Console.WriteLine("Server message: " + serverMessage);
                    
                
                catch (Exception e)
                
                    // This will throw here.
                    Console.WriteLine("Exception caught: " + e.Message);
                

            )
            IsBackground = true;
            clientThread.Start();

            Console.WriteLine("Press [Enter] to exit");
            Console.ReadLine();
        
    

【问题讨论】:

【参考方案1】:

https://zyan.codeplex.com/discussions/453233

“您正在使用双工 TCP 通道在同一个 AppDomain 中进行连接。TcpEx 通道不支持此功能。

请使用 IpcBinary 通道或 NullChannel 连接同一应用程序域。"

【讨论】:

以上是关于Zyan 通信框架 - 由于消息被加密,公钥已更改的主要内容,如果未能解决你的问题,请参考以下文章

公钥密码→RSA详解

RSA加密/解密和签名/验签过程理解

数字签名 数字证书

非对称加密与医疗健康

TLS安全通信

转 公钥加密还是私钥加密