c# - 限制 rijndael 托管算法 key 大小?

标签 c# asp.net

我正在使用 rijndaelmanaged algoritham 进行密码加密

有没有办法限制加密文本 key 的大小?

例如:1,ABC - 加密 key 大小 10

  2, ABCDHGF - Encrypted key size 10

表示固定大小!!

最佳答案

如果您不需要从加密数据中取回密码,您可以使用散列算法。首先计算密码的散列值,然后加密该散列值。由于哈希值具有固定长度,因此您的加密数据将具有固定长度。当您需要检查密码时,解密加密值并根据输入的密码重新计算哈希值,然后检查它们是否匹配。

例如在注册页面上

var encryptedPwd = Encrypt(ComputeHash(txtPassword.Text));
Save(txtUsername.Text, encryptedPwd);

登录页面

var encryptedPwd = SelectPwd(txtUsername.Text);
var pwdHash1 = Decrypt(encryptedPwd);
var pwdHash2 = ComputeHash(txtPassword.Text);

if (AreEqual(pwdHash1, pwdHash2))
   // Login OK!
else
   // Login fail

另一种选择是制作自定义填充。假设您的密码最大长度为 16 个字符。然后你可以用一些固定的字符将每个密码填充到 16 个字符。然后加密这个填充的密码。验证会更容易,但使用哈希更安全。

注册

var encryptedPwd = Encrypt(txtPassword.Text.PadRight(16, 'X'));
Save(txtUsername.Text, encryptedPwd);

登录

var encryptedPwd = SelectPwd(txtUsername.Text);
var pwd1 = Decrypt(encryptedPwd);
var pwd2 = txtPassword.Text.PadRight(16, 'X');

if (AreEqual(pwd1, pwd2))
   // Login OK!
else
   // Login fail

关于c# - 限制 rijndael 托管算法 key 大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18095997/

相关文章:

c# - Global.asax 和 MasterPage 之间会发生什么?

c# - 对象列表转换的最佳方式是什么

c# - 如何通过允许空值在 NHibernate 的 hbm 配置中设置唯一性

c# - 在 CSS 中使用人造全高列时修复 anchor

c# - EWS 托管 API 拉取通知以查看新电子邮件不起作用

.net - 嵌套 UpdatePanel 触发器

asp.net - 与asp.net一起使用的良好的构建自动化和部署过程是什么?

.net - 如何保护开发人员的ASP.Net源代码

asp.net - azure session 和应用程序池回收

c# - 如何调用某些 WPF 用户控件的 "hidden"方法