客户端与服务器之间的通信以及加密/解密

时间:2019-02-27 04:14:25

标签: c# encryption aes binaryfiles ecb

我正在用C#实现一个网站,并且需要进行客户端服务器通信。客户将发送 (POST)加密的数据,服务器将读取数据并以加密的响应进行响应。我们使用的加密是AES-128 ECB密码。

设备正在发送以下格式的加密数据(这是一条数据):

  

3721 b1cc 1759 3067 f993 7c3d bda9 4f04 547c ea1b 3974 2bd1 f213 74a5   2036 7927 e679 bab5 7bbc 3fbf 6a30 85e9 38a8 b877 594a d329 74bb 5d24   2088 738a 9978 cecc

我无法在page_load方法的.aspx页中接收到它。  谁能告诉我这是哪种数据?

此外,如何将纯文本格式转换为此类数据?

我已经具有解密和加密功能。

当我从文件中将上述数据读取到字节数组中后在解密函数中使用以上数据时,我能够获得计划文本。我必须使用Encoding.UTF8.ToString()函数从解密函数输出的字节数组中获取纯文本,以获取纯文本。

但是当我将响应数据转换为字节数组并将其逐字节发送到Response.write()时,我仍然得到原始的加密字符串,而不是上面显示的原始二进制数据。

以下是加密和解密的功能:

    public string decryptMessage(byte[] data)
    {         
        byte[] decryptedBytes = Decrypt(data, key);
        return Encoding.UTF8.GetString(decryptedBytes);
    }

    public byte[] encryptMessage(string plainText)
    {
        byte[] encryptedBytes = Encrypt(Encoding.UTF8.GetBytes(plainText), key);             
        return encryptedBytes;
    }

    public static byte[] Encrypt(byte[] data, byte[] key)
    {
        using (AesCryptoServiceProvider csp = new AesCryptoServiceProvider())
        {
            csp.KeySize = 128;
            csp.BlockSize = 128;
            csp.Key = key;
            csp.Padding = PaddingMode.None;
            csp.Mode = CipherMode.ECB;
            ICryptoTransform encrypter = csp.CreateEncryptor();
            return encrypter.TransformFinalBlock(data, 0, data.Length);
        }
    }

    private static byte[] Decrypt(byte[] data, byte[] key)
    {
        using (AesCryptoServiceProvider csp = new AesCryptoServiceProvider())
        {
            csp.KeySize = 128;
            csp.BlockSize = 128;
            csp.Key = key;
            csp.Padding = PaddingMode.None;
            csp.Mode = CipherMode.ECB;
            ICryptoTransform decrypter = csp.CreateDecryptor();
            return decrypter.TransformFinalBlock(data, 0, data.Length);
        }
    }

例如,计划文本为“你好,你好吗?” ,而加密文本为“ Cxzx3miStNMIjP9zG1xlCme” 。我需要像上面显示的一个示例一样,将此加密的文本转换为原始二进制数据,然后使用Response.Write()将其发送回去。

我尝试使用Response.BinaryWrite(),但是当我在浏览器中调用测试页面时,它没有发回我需要的原始数据。它只是给我“ Cxzx3miStNMIjP9zG1xlCme”或其他一些奇怪的字符。

0 个答案:

没有答案