Q: enfrento la siguiente gran problema:longitud no válida para una matriz de caracteres Base-64 durante la decodificación/descifrado
de tiempo a otro i encontrar la siguiente excepción:
longitud no válido para un Base- 64 matriz de caracteres
I utilizar el cifrado y el descifrado:
public static string Encrypt(string text)
{
try
{
key = Encoding.UTF8.GetBytes(stringKey.Substring(0, 8));
DESCryptoServiceProvider des = new DESCryptoServiceProvider();
Byte[] byteArray = Encoding.UTF8.GetBytes(text);
MemoryStream memoryStream = new MemoryStream();
CryptoStream cryptoStream = new CryptoStream(memoryStream,des.CreateEncryptor(key, IV), CryptoStreamMode.Write);
cryptoStream.Write(byteArray, 0, byteArray.Length);
cryptoStream.FlushFinalBlock();
return Convert.ToBase64String(memoryStream.ToArray());
}
catch (Exception ex)
{
string message = ex.Message;
}
return string.Empty;
}
public static string Decrypt(string text)
{
try
{
key = Encoding.UTF8.GetBytes(stringKey.Substring(0, 8));
DESCryptoServiceProvider des = new DESCryptoServiceProvider();
text = text.Replace(" ", "+")
Byte[] byteArray = Convert.FromBase64String(text);
MemoryStream memoryStream = new MemoryStream();
CryptoStream cryptoStream = new CryptoStream(memoryStream,
des.CreateDecryptor(key, IV), CryptoStreamMode.Write);
cryptoStream.Write(byteArray, 0, byteArray.Length);
cryptoStream.FlushFinalBlock();
return Encoding.UTF8.GetString(memoryStream.ToArray());
}
catch (Exception ex)
{
string message = ex.Message;
}
leí muchos artículos sobre el problema algunos mensajes que hablan de la solución es:
text = text.Replace(" ", "+")
y esto no soluciona mi problema en absoluto
mi cadena es: 3DZF/NZpp0yuQ=3D
por favor necesito ayuda para solucionar este problema.
EDITAR
- Si hay alguna modificación o mejoras en esta clase para que sea trabajo mejor o más seguro o evitar cualquier posible problema de este tipo, i habrá agradecido.
- Si hay clases alternas en lugar de esto, más seguro y no hace estos problemas , le estaré agradecido.
- Uso esta clase en una pequeña aplicación utilizada para verificar correos.
EDIT:
Decoding the querystring values is done already when it's parsed into the Request.
https://stackoverflow.com/a/10879400/418343
Un problema común es incorrectamente pelar el relleno (signos iguales en el final) desde el final de una cuerda. En su caso, "= 3d" probablemente sea simplemente "=" o quizás "==" – EricLaw
No responde su pregunta, pero esta es una forma realmente mala de encriptar - parece que está haciendo lo mismo que Gawker . Solo está utilizando los primeros 8 caracteres como una clave, y usa DES (un estándar de cifrado desactualizado) Consulte http://www.codinghorror.com/blog/2010/12/the-dirty-truth-about-web-passwords. html –
Una nota al margen: 'Encoding.UTF8.GetBytes' es una forma muy mala e insegura de obtener una clave de una contraseña. –