gpt4 book ai didi

c# - 对称加密算法函数

转载 作者:太空狗 更新时间:2023-10-30 01:23:03 25 4
gpt4 key购买 nike

首先,我仍在学习面向对象编程。好的,我有一个包含不同类型对称算法的组合框。

private void Form3_Load(object sender, EventArgs e)
{
openencrypt();
comboBox1.Items.Add("AES");
comboBox1.Items.Add("DES");
comboBox1.Items.Add("Rijndael");
comboBox1.Items.Add("RC2");
comboBox1.Items.Add("Triple DES");
comboBox1.SelectedIndex = 0;
}

然后我让我的加密函数检查它们是什么类型。

byte[] hpass;
string nFilepath = Set.nfilepath;
FileStream Open = new FileStream(oFilepath, FileMode.Open, FileAccess.Read);
FileStream Save = new FileStream(nFilepath, FileMode.OpenOrCreate, FileAccess.Write);
SHA512 sh512 = new SHA512Managed();
hpass = sh512.ComputeHash(Encoding.ASCII.GetBytes(textBox1.Text));
PasswordDeriveBytes pdb = new PasswordDeriveBytes(hpass, hash);

if (comboBox1.SelectedIndex.Equals(0))
{
Aes alg = Aes.Create();
alg.Key = pdb.GetBytes(32);
alg.IV = pdb.GetBytes(16);
}
if (comboBox1.SelectedIndex.Equals(1))
{
DES alg = DES.Create();
alg.Key = pdb.GetBytes(32);
alg.IV = pdb.GetBytes(16);
}
if (comboBox1.SelectedIndex.Equals(2))
{
Rijndael alg = Rijndael.Create();
alg.Key = pdb.GetBytes(32);
alg.IV = pdb.GetBytes(16);
}

但是当我不想在每个 if 语句中放置一个加密流时。那么有没有办法将检查卸载到函数并返回对称算法类型?用 key 和IV?我这样做完全错了吗?## 标题 ##

最佳答案

更面向对象的方法是:

创建一个要在组合框中显示的算法界面:

public interface IAlgorithmItem
{
SymmetricAlgorithm CreateAlgorithm();

string DisplayName { get; }
}

然后,为每个所需的算法创建一个新类:

public class AesAlgorithm : IAlgorithmItem
{
public AesAlgorithm()
{
}

public SymmetricAlgorithm CreateAlgorithm()
{
return Aes.Create();
}

public string DisplayName
{
get { return "AES"; }
}
}

public class RijndaelAlgorithm : IAlgorithmItem
{
public SymmetricAlgorithm CreateAlgorithm()
{
return Rijndael.Create();
}

public string DisplayName
{
get { return "Rijndael"; }
}
}

// ...

然后,您可以创建一个新的项目列表:

var listItems = new List<IAlgorithmItem>() { new AesAlgorithm(), new RijndaelAlgorithm() };

然后你可以将你的组合框绑定(bind)到这个列表:

comboBox1.DataSource = listItems;
comboBox1.DisplayMember = "DisplayName";

稍后,您可以引用所选项目:

var algorithmItem = (IAlgorithmItem)comboBox1.SelectedItem;
var algorithm = algorithmItem.CreateAlgorithm();

编辑:更新了 Will 关于使用接口(interface)而不是抽象基类的建议。编辑 2:更新为使用创建方法而不是属性,因为操作的结果将在每次访问时创建一个新算法。

关于c# - 对称加密算法函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12337533/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com