none
如果通过网络加密解密收发自定义的类 RRS feed

  • 问题

  • 自定义一个类,其中包含枚举、string、byte[]、int等类型成员变量和成员函数,希望在通过网络发送时进行加密发送,对方收到解密后可以正确读出成员变量值
    使用.NET提供的加密解密方法,先把类序列化到网络流中,然后加密网络流Networkstream,对方收到后解密,没办法转换成原来类型,会出错
    如果对类先加密,再序列化到网络流中,对方还是没办法转换成原来的类型
    • 已移动 Sheng Jiang 蒋晟Moderator 2009年3月19日 19:04 .Net基础类库问题 (从 Visual C# 移动到 .NET Framework 一般性问题讨论区)
    2009年3月19日 8:44

答案

  • 请附加代码


    热烈庆祝进入4星活跃用户队伍
    有原则的回答问题: 不懂的不去装懂,别人回答得很完整的,没有需要补充的不去蹭分。
    • 已标记为答案 zpy0901 2009年3月20日 5:10
    2009年3月19日 8:59
    版主

全部回复

  • 你好!
         你这样试试:
         CryptoStream cryptoStream=new CryptoStream(networkStream);
         直接使用这个cryptoStream来读写! 

    周雪峰
    2009年3月19日 8:59
    版主
  • 请附加代码


    热烈庆祝进入4星活跃用户队伍
    有原则的回答问题: 不懂的不去装懂,别人回答得很完整的,没有需要补充的不去蹭分。
    • 已标记为答案 zpy0901 2009年3月20日 5:10
    2009年3月19日 8:59
    版主
  • enum head {read,write,.....}
    class code
    {
     head codehead;
    string name;
    int port;
    byte[] content;
    ......
    }
    怎样将我自定义的类加密到网络流ns中
    void Encrypt(networkstream ns,code mycode)
    {
    DESCryptoServiceProvider DCSP = new DESCryptoServiceProvider();
    CryptoStream cStream = new CryptoStream(ns, DCSP.CreateEncryptor(rgbKey, rgbIV), CryptoStreamMode.Write);
    //这样将自定义类变为数组,解密后怎样转化回来?
    byte[] inputByteArray = Encoding.UTF8.GetBytes(mycode.ToString());

    cStream.Write(inputByteArray, 0, inputByteArray.Length);

    }
    解密函数
    code Decrypt(networkstream ns)
    {
    DESCryptoServiceProvider DCSP = new DESCryptoServiceProvider();
    CryptoStream cStream = new CryptoStream(ns, DCSP.CreateDecryptor(rgbKey, rgbIV), CryptoStreamMode.Read);
    MemoryStream mStream = new MemoryStream();
    while((len=cStream .read(buffer,0,buffer.length)>0))
    {
        mStream .write(buffer,0,len);
    }
    //怎样将内存流转化为自定义的类?
    ....
    }
    2009年3月20日 5:34
  • 谢谢,帮我看看我贴出来的代码有什么问题,该怎么发送、接收自己定义的类
    2009年3月23日 6:36