C# 解码和编码字符串.对称算法的硬编码密钥
我编写了以下用于编码和解码字符串数据的类(带一个键的对称算法): 使用方法如下:C# 解码和编码字符串.对称算法的硬编码密钥,c#,asp.net,key,encryption-symmetric,C#,Asp.net,Key,Encryption Symmetric,我编写了以下用于编码和解码字符串数据的类(带一个键的对称算法): 使用方法如下: protected void Page_Load(object sender, EventArgs e) { SymmetricEncryptionUtility.AlgorithmName = "TripleDES"; Response.Write(SymmetricEncryptionUtility.EncryptData("1234-4567-8910-2345")); } 关于MyKey,
protected void Page_Load(object sender, EventArgs e)
{
SymmetricEncryptionUtility.AlgorithmName = "TripleDES";
Response.Write(SymmetricEncryptionUtility.EncryptData("1234-4567-8910-2345"));
}
关于MyKey,我有一些问题->我们如何为对称算法使用硬编码密钥,并在上层阶级中使用它?
上面的错误代码如下所示:
当前web请求的执行。请查看堆栈跟踪 有关错误以及错误来源的详细信息,请参阅 代码 System.Security.Cryptography.CryptographyException:指定的密钥为 此算法的大小无效 如何修复此错误
提前感谢阅读错误并查看以下文档: 该算法支持从128位到192位的密钥长度,增量为64位 这意味着例如
private const string MyKey = "bla bla bla blah";
会有用的
您没有问过这个问题,但我不确定将这个类创建为static是个好主意。如果在代码中的两个不同位置使用它,可能会导致意外的结果,因为AlgorithmName
是静态的
此外,我认为使用一个恒定的键而不是可变的算法是没有意义的,特别是因为不同的算法需要不同长度的键。阅读错误并查看文档以了解: 该算法支持从128位到192位的密钥长度,增量为64位 这意味着例如
private const string MyKey = "bla bla bla blah";
会有用的
您没有问过这个问题,但我不确定将这个类创建为static是个好主意。如果在代码中的两个不同位置使用它,可能会导致意外的结果,因为AlgorithmName
是静态的
另外,我认为使用一个不变的键但可变的算法是没有意义的,特别是因为不同的算法需要不同长度的密钥。您可以使用
系统.安全.加密.Rfc2898DeriveBytes
根据字符串
密码和字节[]安全地为您的密钥生成正确的字节数。
salt:
var helper = new Rfc2898DeriveBytes(password, salt);
algorithm.Key = helper.GetBytes(algorithm.KeySize / 8);
有关
Rfc2898DeriveBytes
及其使用方法的更多信息,请查看其。您可以使用System.Security.Cryptography.Rfc2898DeriveBytes
根据字符串
密码和byte[]安全地为密钥生成正确的字节数
var helper = new Rfc2898DeriveBytes(password, salt);
algorithm.Key = helper.GetBytes(algorithm.KeySize / 8);
有关Rfc2898DeriveBytes
及其使用方法的更多信息,请查看其。@LostLord,它不是关于字符串本身,而是关于从中创建的byte[]
。您使用的是UTF8编码,所有字符都来自ASCII,因此每个字符都使用一个字节进行编码。将位转换为字节后,这意味着您需要以8个字符(即16或24个字符)为增量的16到24个字符。@LostLord,这与字符串本身无关,而是与您从中创建的byte[]
有关。您使用的是UTF8编码,所有字符都来自ASCII,因此每个字符都使用一个字节进行编码。在将位转换为字节后,这意味着您需要以8个字符(即16或24个字符)为增量的16到24个字符。
private const string MyKey = "bla bla bla blah";
var helper = new Rfc2898DeriveBytes(password, salt);
algorithm.Key = helper.GetBytes(algorithm.KeySize / 8);