「已注销」 2024-06-12 00:10 采纳率: 0%
浏览 2
已结题

c sharp基于随笔画的加解密系统

private MenuStrip menuStrip;
private ToolStripMenuItem drawToolStripMenuItem;
private ToolStripMenuItem colorToolStripMenuItem;
private ToolStripMenuItem lineTypeToolStripMenuItem;
private ToolStripMenuItem encryptionToolStripMenuItem;
private ToolStripMenuItem decryptionToolStripMenuItem;

private Color currentColor = Color.Black;
private int currentLineType = 1;

public drawingEncryption()
{
    InitializeComponent();

    bitmap = new Bitmap(ClientSize.Width, ClientSize.Height);
    graphics = Graphics.FromImage(bitmap);
    graphics.Clear(Color.White);
}

private void InitializeComponent()
{
    menuStrip = new MenuStrip();
    drawToolStripMenuItem = new ToolStripMenuItem("绘图");
    colorToolStripMenuItem = new ToolStripMenuItem("颜色");
    lineTypeToolStripMenuItem = new ToolStripMenuItem("线条类型");
    encryptionToolStripMenuItem = new ToolStripMenuItem("加密");
    decryptionToolStripMenuItem = new ToolStripMenuItem("解密");

    menuStrip.Items.Add(drawToolStripMenuItem);
    menuStrip.Items.Add(colorToolStripMenuItem);
    menuStrip.Items.Add(lineTypeToolStripMenuItem);
    menuStrip.Items.Add(encryptionToolStripMenuItem);
    menuStrip.Items.Add(decryptionToolStripMenuItem);

    colorToolStripMenuItem.DropDownItems.Add(new ToolStripMenuItem("黑色", null, ColorBlack_Click));
    colorToolStripMenuItem.DropDownItems.Add(new ToolStripMenuItem("红色", null, ColorRed_Click));
    colorToolStripMenuItem.DropDownItems.Add(new ToolStripMenuItem("蓝色", null, ColorBlue_Click));

    lineTypeToolStripMenuItem.DropDownItems.Add(new ToolStripMenuItem("实线", null, LineTypeSolid_Click));
    lineTypeToolStripMenuItem.DropDownItems.Add(new ToolStripMenuItem("虚线", null, LineTypeDashed_Click));

    encryptionToolStripMenuItem.Click += EncryptionToolStripMenuItem_Click;
    decryptionToolStripMenuItem.Click += DecryptionToolStripMenuItem_Click;

    this.Controls.Add(menuStrip);

    this.Paint += new PaintEventHandler(Form1_Paint);
    this.MouseDown += new MouseEventHandler(Form1_MouseDown);
    this.MouseMove += new MouseEventHandler(Form1_MouseMove);
    this.MouseUp += new MouseEventHandler(Form1_MouseUp);
}

private void ColorBlack_Click(object sender, EventArgs e)
{
    currentColor = Color.Black;
}

private void ColorRed_Click(object sender, EventArgs e)
{
    currentColor = Color.Red;
}

private void ColorBlue_Click(object sender, EventArgs e)
{
    currentColor = Color.Blue;
}

private void LineTypeSolid_Click(object sender, EventArgs e)
{
    currentLineType = 1;
}

private void LineTypeDashed_Click(object sender, EventArgs e)
{
    currentLineType = 2;
}

private void Form1_MouseDown(object sender, MouseEventArgs e)
{
    lastPoint = e.Location;
    isDrawing = true;
}

private void Form1_MouseMove(object sender, MouseEventArgs e)
{
    if (isDrawing)
    {
        using (Pen pen = new Pen(currentColor, 2))
        {
            pen.DashStyle = (DashStyle)currentLineType;
            graphics.DrawLine(pen, lastPoint, e.Location);
            lastPoint = e.Location;
            Invalidate();
        }
    }
}

private void Form1_MouseUp(object sender, MouseEventArgs e)
{
    isDrawing = false;
}

private void Form1_Paint(object sender, PaintEventArgs e)
{
    e.Graphics.DrawImage(bitmap, 0, 0);
}

private void EncryptionToolStripMenuItem_Click(object sender, EventArgs e)
{
    SaveFileDialog saveFileDialog = new SaveFileDialog();
    saveFileDialog.Filter = "加密文件 (*.enc)|*.enc";
    if (saveFileDialog.ShowDialog() == DialogResult.OK)
    {
        try
        {
            // 生成对称密钥和 IV
            Aes aes = Aes.Create();
            byte[] key = aes.Key;
            byte[] iv = aes.IV;

            // 加密绘图数据
            byte[] encryptedData = EncryptDrawingData(bitmap, key, iv);

            // 生成非对称密钥对
            RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
            byte[] publicKey = rsa.ExportRSAPublicKey();
            byte[] privateKey = rsa.ExportRSAPrivateKey();

            // 加密对称密钥和 IV
            byte[] encryptedKeyIV = rsa.Encrypt(key.Concat(iv).ToArray(), false);

            // 将加密的信息写入文件
            using (FileStream fileStream = new FileStream(saveFileDialog.FileName, FileMode.Create))
            {
                fileStream.Write(encryptedData, 0, encryptedData.Length);
                fileStream.Write(encryptedKeyIV, 0, encryptedKeyIV.Length);
                fileStream.Write(publicKey, 0, publicKey.Length);
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show("加密出错: " + ex.Message);
        }
    }
}

private void DecryptionToolStripMenuItem_Click(object sender, EventArgs e)
{
    OpenFileDialog openFileDialog = new OpenFileDialog();
    openFileDialog.Filter = "加密文件 (*.enc)|*.enc";
    if (openFileDialog.ShowDialog() == DialogResult.OK)
    {
        try
        {
            // 读取文件数据
            byte[] fileData = File.ReadAllBytes(openFileDialog.FileName);

            // 分离出加密的绘图数据、加密的对称密钥和 IV、公钥
            byte[] encryptedDrawingData = new byte[fileData.Length - (256 + 16)];
            byte[] encryptedKeyIV = new byte[256];
            byte[] publicKey = new byte[128];

            Array.Copy(fileData, 0, encryptedDrawingData, 0, encryptedDrawingData.Length);
            Array.Copy(fileData, encryptedDrawingData.Length, encryptedKeyIV, 0, encryptedKeyIV.Length);
            Array.Copy(fileData, encryptedDrawingData.Length + encryptedKeyIV.Length, publicKey, 0, publicKey.Length);

            // 使用私钥解密对称密钥和 IV
            RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
            rsa.ImportRSAPrivateKey(privateKey);
            byte[] decryptedKeyIV = rsa.Decrypt(encryptedKeyIV, false);

            // 提取出对称密钥和 IV
            byte[] decryptedKey = decryptedKeyIV.Take(128).ToArray();
            byte[] decryptedIV = decryptedKeyIV.Skip(128).ToArray();

            // 解密绘图数据
            byte[] decryptedDrawingData = DecryptDrawingData(encryptedDrawingData, decryptedKey, decryptedIV);

            // 重新绘制图像
            bitmap = new Bitmap(ClientSize.Width, ClientSize.Height);
            graphics = Graphics.FromImage(bitmap);
            graphics.Clear(Color.White);
            using (MemoryStream memoryStream = new MemoryStream(decryptedDrawingData))
            {
                Image image = Image.FromStream(memoryStream);
                graphics.DrawImage(image, 0, 0);
            }
            Invalidate();
        }
        catch (Exception ex)
        {
            MessageBox.Show("解密出错: " + ex.Message);
        }
    }
}

private byte[] EncryptDrawingData(Bitmap bitmap, byte[] key, byte[] iv)
{
    using (MemoryStream memoryStream = new MemoryStream())
    {
        bitmap.Save(memoryStream, System.Drawing.Imaging.ImageFormat.Bmp);
        byte[] drawingData = memoryStream.ToArray();

        Aes aes = Aes.Create();
        aes.Key = key;
        aes.IV = iv;

        using (ICryptoTransform encryptor = aes.CreateEncryptor())
        using (CryptoStream cryptoStream = new CryptoStream(memoryStream, encryptor, CryptoStreamMode.Write))
        {
            cryptoStream.Write(drawingData, 0, drawingData.Length);
        }

        return memoryStream.ToArray();
    }
}

private byte[] DecryptDrawingData(byte[] encryptedData, byte[] key, byte[] iv)
{
    Aes aes = Aes.Create();
    aes.Key = key;
    aes.IV = iv;

    using (ICryptoTransform decryptor = aes.CreateDecryptor())
    using (MemoryStream memoryStream = new MemoryStream(encryptedData))
    using (CryptoStream cryptoStream = new CryptoStream(memoryStream, decryptor, CryptoStreamMode.Read))
    {
        byte[] dec

img


怎么修改代码才能实现题目的要求?

  • 写回答

1条回答 默认 最新

  • threenewbee 2024-06-12 09:07
    关注

    这代码是ai生成的,没用,要人工编写。

    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 6月12日
  • 创建了问题 6月12日