I am making a Registration and a login Form with encoded password saved to database, I can encode the password using encoding.utf8.
Problem is I register with some username and password and the data get saved to database with encoded password, but when I login with the same data it shows me this below error.
Invalid length for a Base-64 char array or string.
Can anyone give me the described solution for this. Below I am attaching my encoded and decoded methods :
Encoded :
private string encryption(string clearText)
{
string encryptkey = "123";
byte[] clearBytes = Encoding.Unicode.GetBytes(clearText);
using (Aes encrypt = Aes.Create())
{
Rfc2898DeriveBytes rdb = new Rfc2898DeriveBytes(encryptkey, new byte[] { 0x49, 0x76, 0x61, 0x6e, 0x20, 0x4d, 0x65, 0x64, 0x76, 0x65, 0x64, 0x65, 0x76 });
encrypt.Key = rdb.GetBytes(32);
encrypt.IV = rdb.GetBytes(16);
using (MemoryStream ms = new MemoryStream())
{
using (CryptoStream cst = new CryptoStream(ms, encrypt.CreateEncryptor(), CryptoStreamMode.Write))
{
cst.Write(clearBytes, 0, clearBytes.Length);
cst.Close();
}
clearText = Convert.ToBase64String(ms.ToArray());
}
}
return clearText;
Decoded:
private string decryp(string cipherText)
{
cipherText = cipherText.Replace(" ", "+");
string decryptkey = "123";
byte[] cipherBytes = Convert.FromBase64String(cipherText.Replace(" ", "+"));
using (Aes encrypt = Aes.Create())
{
Rfc2898DeriveBytes rdb = new Rfc2898DeriveBytes(decryptkey, new byte[] { 0x49, 0x76, 0x61, 0x6e, 0x20, 0x4d, 0x65, 0x64, 0x76, 0x65, 0x64, 0x65, 0x76 });
encrypt.Key = rdb.GetBytes(32);
encrypt.IV = rdb.GetBytes(16);
using (MemoryStream ms = new MemoryStream())
{
using (CryptoStream cst = new CryptoStream(ms, encrypt.CreateDecryptor(), CryptoStreamMode.Write))
{
cst.Write(cipherBytes, 0, cipherBytes.Length);
cst.Close();
}
cipherText = Encoding.Unicode.GetString(ms.ToArray());
}
}
return cipherText;
Any help would be appreciated !