字符串到字节数组(从字符串到XML),然后再返回
本文关键字:字符串 然后 返回 到字节 数组 XML | 更新日期: 2023-09-27 18:25:55
我知道有100万个关于"字符串-字节数组"转换的问题,但没有一个符合我的问题。
为了安装我的软件,我需要保存一些来自用户的信息(服务器地址、用户ID、密码等)。其中一些信息需要保护(使用DPAPI加密)。为此,我必须将string
(SecureString
)转换为byte[]
public static byte[] StringToByte(string s)
{
return Convert.FromBase64String(s);
}
我的第一个问题在哪里。如果字符串长度不是4的倍数(s.lenght % 4 == 0
),我会得到一个"Base-64字符数组的长度无效"错误。我读到我可以(必须)在string
的末尾添加"=",但其中一些字符串可能是密码(可能包含"=")。我需要将(加密的)数据存储在XML文件中,为什么我不能使用Unicode编码(我不知道为什么,但它会破坏XML文件……我想是因为编码)。
作为最后一步,我必须回到应用程序启动时获取存储数据的方式。
你们中有人能帮我解决这个问题吗?我不在乎XML中的输出,只要它是"可读的"。
向Alex 致以最良好的问候
我的第一个问题在哪里。如果字符串lenght不是4的倍数(s.lenght%4==0),我会得到一个"Base-64字符数组的长度无效"错误。
这表明它一开始就不是base64。听起来你在这里走错了方向-base64用于将二进制数据转换为文本。要将文本转换为二进制形式,通常只应使用Encoding.GetBytes
:
return Encoding.UTF8.GetBytes(text);
现在,如果您需要将加密结果(将是二进制数据)编码为文本,则您将使用base64。(因为加密UTF-8编码文本的结果是而不是UTF-8编码文本。)
所以类似于:
public static string EncryptText(string input)
{
byte[] unencryptedBytes = Encoding.UTF8.GetBytes(input);
byte[] encryptedBytes = EncryptBytes(unencryptedBytes); // Not shown here
return Convert.ToBase64String(encryptedBytes);
}
public static string DecryptText(string input)
{
byte[] encryptedBytes = Convert.FromBase64String(input);
byte[] unencryptedBytes = DecryptBytes(encryptedBytes); // Not shown here
return Encoding.UTF8.GetString(unencryptedBytes);
}