.NET加密 [英] .NET Encryption

查看:127
本文介绍了.NET加密的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想要做的是当用户注册密码被加密,并且加密的密码被保存在数据库中时,并且当用户登录时,应该解密密码以比较如果用户输入了正确的密码,但是当我尝试解密它给我一个坏数据的例外。



请帮助。
这是我的代码:

  protected void btnLogin_Click(object sender,EventArgs e)
{
try
{
private Cryptography crypt = new Cryptography();
var registerUser = new test.Model.User();
registerUser.EmailAddress = txtEmail.Text;
registerUser.Password = txtPassword.Text;
// new test()。Getbyusername(registerUser);
new test()。getbyemail(registerUser,crypt);
}
catch(Exception ex)
{

}
}

public void getbyemail(User user,Cryptography crypt )
{
try
{
var repo = new UserRepository();
var test = repo.GetEncryptedPasswrd(user);
var o = repo.getPrivateKey(user.EmailAddress);
crypt.privateKey = o;
var j = repo.getpublicKey(user.EmailAddress);
crypt.publicKey = j;
decryptPassword(test,o,crypt);

}
catch(Exception ex)
{

}
}

public String decryptPassword [] encryptedpassword,string privateKey,Cryptography cry)
{
decryptpted = cry.decrypt(encryptedpassword,privateKey);
//返回Encoding.ASCII.GetString(解密);
return Encoding.ASCII.GetString(decryptpted);

}

protected void btnRegister_Click(object sender,EventArgs e)
{
加密crypt = new Cryptography();
var registerUser = new test.Model.User();
registerUser.Name = txtName.Text;
registerUser.Surname = txtSurname.Text;
registerUser.EmailAddress = txtEmailAddress.Text;
registerUser.Password = txtPassword.Text;
registerUser.DateRegisterd = DateTime.Now;
new test()。RegisterUser(registerUser,crypt.privateKey,crypt.publicKey,crypt,encrypted);
}

public void RegisterUser(用户用户,字符串privateKey,字符串publicKey,加密隐藏,字节[]加密)
{
try
{
var repo = new UserRepository();
byte [] plainText = Encoding.ASCII.GetBytes(user.Password);
encrypted = crypt.encrypt(plainText,crypt.publicKey);
user.Password = Encoding.ASCII.GetString(encrypted);
user.PrivateKey = crypt.privateKey;
user.PublickKey = crypt.publicKey;
repo.Add(user);
}
catch(Exception ex)
{

}
}

提前感谢

解决方案

如上所述,你应该真的哈希。



仍然如果你想加密,你的例子不解密密码。相反,你应该加密用户的密码,只需比较数据库。



您可以考虑使用这个简单的选项来填写密码。 http://davidhayden.com/blog/dave/archive/2004 /02/16/157.aspx


what i am trying to do is when a user registers the password gets encrypted, and the encrypted password gets saved in a database, and when the user logs in it should then decrypt the password to compare if the user entered the correct password, but when i try to decrypt its gives me a "Bad data" exception.

Please help guys. Here is my code:

protected void btnLogin_Click(object sender, EventArgs e)
{
    try
    {
        private Cryptography crypt = new Cryptography();
        var registerUser = new test.Model.User();
        registerUser.EmailAddress = txtEmail.Text;
        registerUser.Password = txtPassword.Text;
        //new test().Getbyusername(registerUser);
        new test().getbyemail(registerUser, crypt);
    }
    catch (Exception ex)
    {

    }
}

public void getbyemail(User user, Cryptography crypt)
{
    try
    {
        var repo = new UserRepository();
        var test = repo.GetEncryptedPasswrd(user);
        var o = repo.getPrivateKey(user.EmailAddress);
        crypt.privateKey = o;
        var j = repo.getpublicKey(user.EmailAddress);
        crypt.publicKey = j;
        decryptPassword(test, o, crypt);

    }
    catch (Exception ex)
    {

    }
}

public String decryptPassword(byte [] encryptedpassword, string privateKey, Cryptography cry)
{
    decrypted = cry.decrypt(encryptedpassword, privateKey);
   //return Encoding.ASCII.GetString(decrypted);
    return Encoding.ASCII.GetString(decrypted);

}

protected void btnRegister_Click(object sender, EventArgs e)
{
    Cryptography crypt = new Cryptography();
    var registerUser = new test.Model.User();
    registerUser.Name = txtName.Text;
    registerUser.Surname = txtSurname.Text;
    registerUser.EmailAddress = txtEmailAddress.Text;
    registerUser.Password = txtPassword.Text;
    registerUser.DateRegisterd = DateTime.Now;
    new test().RegisterUser(registerUser, crypt.privateKey, crypt.publicKey,crypt, encrypted);
}

public void RegisterUser(User user, string privateKey, string publicKey, Cryptography crypt, byte[] encrypted)
{
    try
    {
        var repo = new UserRepository();
        byte[] plainText = Encoding.ASCII.GetBytes(user.Password);
        encrypted = crypt.encrypt(plainText, crypt.publicKey);
        user.Password = Encoding.ASCII.GetString(encrypted);
        user.PrivateKey = crypt.privateKey;
        user.PublickKey = crypt.publicKey;
        repo.Add(user);
    }
    catch (Exception ex)
    {

    }
}

Thanks in advance.

解决方案

As said above comment you should really hash it .

Still if you want to encrypt as you example don't decrypt password . Instead you should encrypt password from user and simply compare to database .

You can Consider this simple option to hash the password . http://davidhayden.com/blog/dave/archive/2004/02/16/157.aspx .

这篇关于.NET加密的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆