【问题标题】:Encrypt a file and send it through加密文件并通过它发送
【发布时间】:2013-05-18 14:04:46
【问题描述】:

我需要使用 AES 192 加密文件并通过套接字将其发送到客户端。 我正在使用此代码来加密文件:

string outputFile = "crypted";

            //Confidentiality
            RijndaelManaged AES192Confidentiality = new RijndaelManaged();
            AES192Confidentiality.KeySize = 192;
            AES192Confidentiality.BlockSize = 192;
            AES192Confidentiality.IV = ConfIV;
            AES192Confidentiality.Key = ConfKey;
            AES192Confidentiality.Mode = CipherMode.CBC;
            FileStream inputFileStream = new FileStream(par.GetFilePath(), FileMode.Open, FileAccess.Read);
            FileStream outputFileStream = new FileStream(outputFile, FileMode.Create, FileAccess.Write);
            byte[] inputFileData = new byte[(int)inputFileStream.Length];
            inputFileStream.Read(inputFileData, 0, (int)inputFileStream.Length);
            CryptoStream encryptStream = new CryptoStream(outputFileStream, AES192Confidentiality.CreateEncryptor(), CryptoStreamMode.Write);
            encryptStream.Write(inputFileData, 0, (int)inputFileStream.Length);
            encryptStream.FlushFinalBlock();
            encryptStream.Close();

我想知道我现在如何通过套接字发送这个加密的临时文件,以便接收者可以重建文件并解密它。 有人可以给我一些教程或指南吗? 先谢谢大家了

【问题讨论】:

  • 如果您愿意使用网络库,请查看这篇文章networkcomms.net/using-encryption。我是这个库的开发者。
  • 感谢您的回答,但由于该程序是针对学校作业的,因此我不允许使用外部库:)
  • 首先解决没有套接字的解密问题。您能否在现有程序中添加更多语句,以打开您刚刚编写的输出流作为 second 输入流,读取加密字节,解密这些字节,然后打印出原始明文?因为那是最难的部分。
  • 嗯,实际上,这还不是最难的部分。最困难的部分是通过套接字发送密钥,以便窃听者无法恢复密钥。但一次解决一个问题;如果您不知道接收方将如何解密消息,请先解决该问题。

标签: c# file sockets encryption


【解决方案1】:

您可以为套接字创建NetworkStream 的实例,然后调用encryptStream.CopyTo(myNetworkStream);

【讨论】:

    【解决方案2】:

    考虑使用TcpClient 连接到服务器并发送数据。我不会写一个完整的答案,因为你已经指出这是学校作业,但看看这个例子是如何写入数据的:

    // Get a client stream for reading and writing. 
    NetworkStream networkStream = client.GetStream();
    
    // Send the message to the connected TcpServer. 
    networkStream.Write(data, 0, data.Length);
    

    您可能希望避免稍微调整它以使用 CopyTo 将数据直接从加密流写入网络流。

    这假设你不必解决secure key exchange的问题。

    【讨论】:

    • 感谢您的回答,正如您所说,我不必解决安全交换密钥问题,超出了本计划的范围。我想问你一个问题,使用你向我展示的这种方法,我如何在接收方重建文件的扩展名?
    • 如果您指的是原始文件名的扩展名,则必须将其与加密数据一起发送或单独发送。您可以使用文件数据对其进行加密并发送。在服务器端,解密后,您必须先读取扩展名,然后再读取原始数据。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-29
    • 2015-01-06
    相关资源
    最近更新 更多