字符串到字节数组(到字符串到XML)然后再返回

时间:2013-08-02 16:33:24

标签: c# string type-conversion bytearray

我知道有关于“字符串 - 字节数组”转换的100万个问题,但它们都不适合我的问题。

为了安装我的软件,我需要保存用户的一些信息(serveraddress,userID,密码等)。其中一些信息需要保护(使用DPAPI加密)。为此,我必须将stringSecureString)转换为byte[]

public static byte[] StringToByte(string s)
{
    return Convert.FromBase64String(s);
}

我得到了第一个问题。如果字符串lenght不是4(s.lenght % 4 == 0)的倍数,则会得到“Base-64 char数组的长度无效”错误。我已经读过,我可以(必须)在string的末尾添加“=”,但其中一些字符串可能是密码(可能包含“=”)。我需要将(加密的)数据存储在XML文件中,为什么我不能使用Unicode编码(我不知道为什么会破坏XML文件......因为我猜想会编码)。

作为最后一步,我必须回过头来获取应用启动时存储的数据。

你们中有人可以帮助我解决这个问题吗?我不关心XML中的输出,只要它是“可读的”。

最好的问候亚历克斯

1 个答案:

答案 0 :(得分:4)

  

我得到了第一个问题。如果字符串lenght不是4的倍数(s.lenght%4 == 0),我得到“Base-64 char数组的长度无效”错误。

这表明它不是开始的基础64。听起来你在这里走错了方向 - base64用于将二进制数据转换为文本。要将 text 转换为二进制形式,通常应该使用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);
}