我有两种方法,其中我需要在开始时将字符串转换为base64并在结束时逆转此操作。问题是当我的输入字符串长度不能被4整除时,转换方法将引发异常。
public class Hashing
{
public string Encrypt(string encrypted)
{
byte[] byteData = Convert.FromBase64String(encrypted);
byte[] byteResult = Encrypt(byteData); // pt.1
return Convert.ToBase64String(byteResult);
}
public string Decrypt(string decrypted)
{
byte[] byteData = Convert.FromBase64String(decrypted);
byte[] byteResult = Decrypt(byteData); //pt.2
return Convert.ToBase64String(byteResult);
}
/*
...
*/
}
class Program
{
static void Main(string[] args)
{
Hashing cryptographyContext = new Hashing();
var cryptoTest = "123456789"; //someStringThatNotGonnaBeConverted;
string enc = cryptographyContext.Encrypt(password);
string dec = cryptographyContext.Decrypt(enc);
Console.WriteLine(dec);
Console.ReadLine();
}
}
问题是我需要在Decrypt和Encrypt方法的输入处使用base64格式(这些方法在第1和2页),并且我需要从这些方法返回字符串。有人知道如何解决此问题吗?
答案 0 :(得分:3)
您使用的base-64错误; base-64的翻译为:
byte[]
转换为结构化 string
string
到原始byte[]
相反,常规文本编码则以另一种方式起作用:
string
转换为结构化 byte[]
byte[]
到原始string
您正尝试使用base-64从任意 byte[]
中获取string
,而并非如此。为此,您需要使用常规文本编码,例如UTF-8。尝试将Encoding.UTF8.GetBytes()
等用于一半,将base-64用于另一:
public string Encrypt(string plainText)
{
byte[] byteData = Encoding.UTF8.GetBytes(plainText);
byte[] byteResult = Encrypt(byteData);
return Convert.ToBase64String(byteResult);
}
public string Decrypt(string cipherText)
{
byte[] byteData = Convert.FromBase64String(cipherText);
byte[] byteResult = Decrypt(byteData);
return Encoding.UTF8.GetString(byteResult);
}