我如何用存根包装我的构建器

本文关键字:我的 构建 包装 存根 何用 | 更新日期: 2023-09-27 18:07:53

我目前正在学习密码器,这是我到目前为止所学到的。

密码器由构建器和存根组成。

构建器的作用是加密文件,存根包装文件让它在一个缓冲区中运行也就是在解密的机器的内存中。(如果我说错了,请纠正)

我已经创建了我的文件加密器(构建器),说实话,我不知道如何创建一个存根…我已经找了一整天了,但我能找到的都是这些非常老的控制台应用程序,没有解释任何事情。

所以我的问题是…我如何用存根包装我当前的文件加密器…或者如何创建存根。我不知道如何形成这个问题,因为我不熟悉存根。

这是我的文件加密器

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.Windows;
using Microsoft.Win32;
using System.Security.Cryptography;
using System.IO;
namespace FileEncrypter
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        string key;
        public MainWindow()
        {
            InitializeComponent();
            key = generateKey();
        }
        public string generateKey()
        {
            DESCryptoServiceProvider desCrypto = (DESCryptoServiceProvider)DESCryptoServiceProvider.Create();
            return ASCIIEncoding.ASCII.GetString(desCrypto.Key);
        }
        private void EncryptBtn_Click(object sender, RoutedEventArgs e)
        {
            try
            {
                OpenFileDialog ofd = new OpenFileDialog();
                ofd.ShowDialog();
                inputencryptFileTextBox.Text = ofd.FileName;
                SaveFileDialog sfd = new SaveFileDialog();
                sfd.ShowDialog();
                outputencryptFileTextBox.Text = sfd.FileName;
                encrypt(inputencryptFileTextBox.Text, outputencryptFileTextBox.Text, key);
                MessageBox.Show("File has been encrypted.", "File");
            }
            catch(Exception encEx)
            {
                MessageBox.Show(encEx.ToString());
            }
        }
        private void encrypt(string input, string output, string strhash)
        {
            FileStream inFs, outFs;
            CryptoStream cs;
            TripleDESCryptoServiceProvider TDC = new TripleDESCryptoServiceProvider();
            MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();
            byte[] byteHash, byteTexto;
            inFs = new FileStream(input, FileMode.Open, FileAccess.Read);
            outFs = new FileStream(output, FileMode.OpenOrCreate, FileAccess.Write);
            byteHash = md5.ComputeHash(ASCIIEncoding.ASCII.GetBytes(strhash));
            byteTexto = File.ReadAllBytes(input);
            md5.Clear();
            TDC.Key = byteHash;
            TDC.Mode = CipherMode.ECB;
            cs = new CryptoStream(outFs, TDC.CreateEncryptor(), CryptoStreamMode.Write);
            int byteRead;
            long length, position = 0;
            length = inFs.Length;
            while (position < length)
            {
                byteRead = inFs.Read(byteTexto, 0, byteTexto.Length);
                position += byteRead;
                cs.Write(byteTexto, 0, byteRead);
            }
            inFs.Close();
            outFs.Close();
        }
        private void DecryptBtn_Click(object sender, RoutedEventArgs e)
        {
            try
            {
                OpenFileDialog ofd = new OpenFileDialog();
                ofd.ShowDialog();
                inputdecryptFileTextBox.Text = ofd.FileName;
                SaveFileDialog sfd = new SaveFileDialog();
                sfd.ShowDialog();
                outputdecryptFileTextBox.Text = sfd.FileName;
                decrypt(inputdecryptFileTextBox.Text, outputdecryptFileTextBox.Text, key);
                MessageBox.Show("File has been decrypted.", "File");
            }
            catch(Exception ex)
            {
                MessageBox.Show(ex.ToString());
            }
        }

        private void decrypt(string input, string output, string strhash)
        {
            FileStream inFs, outFs;
            CryptoStream cs;
            TripleDESCryptoServiceProvider TDC = new TripleDESCryptoServiceProvider();
            MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();
            byte[] byteHash, byteTexto;
            inFs = new FileStream(input, FileMode.Open, FileAccess.Read);
            outFs = new FileStream(output, FileMode.OpenOrCreate, FileAccess.Write);
            byteHash = md5.ComputeHash(ASCIIEncoding.ASCII.GetBytes(strhash));
            byteTexto = File.ReadAllBytes(input);
            md5.Clear();
            TDC.Key = byteHash;
            TDC.Mode = CipherMode.ECB;
            cs = new CryptoStream(outFs, TDC.CreateDecryptor(), CryptoStreamMode.Write);
            int byteRead;
            long length, position = 0;
            length = inFs.Length;
            while (position < length)
            {
                byteRead = inFs.Read(byteTexto, 0, byteTexto.Length);
                position += byteRead;
                cs.Write(byteTexto, 0, byteRead);
            }
            inFs.Close();
            outFs.Close();
        }
    }
}

我如何用存根包装我的构建器

存根可以是一个小型项目,其中加密部分作为资源。当存根被加载时,它将从资源中描述程序集,并使用反射来查找"主入口点"。问题是,如何保存私钥....嗯…私人. .

我还没有听说过在这种情况下使用存根。我只是在测试或添加"占位符"api方面听到它。

我想你要问的是如何让构建器使用可以包装文件或包装内存流的接口?如果是这样,您的加密方法可以接受接口而不是字符串。该接口可以提供用于读取和写入数据的API。当您调用encrypt方法时,您可以新建接口的文件实现或内存实现并将其传递给encrypt

由于你在encrypt方法中处理一个接口,它将平等地对待两个对象。

或者,您也可以只接受Stream。然后您可以传入MemoryStreamFileStream

相关文章: