c# - 字符串到字节数组(到字符串到 XML)并再次返回

标签 c# string type-conversion arrays

我知道有 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 中的输出,只要它是“可读的”即可。

问候亚历克斯

最佳答案

where i get my first problem. If the strings lenght is a not a multiple of 4 (s.lenght % 4 == 0) i get a "Invalid length for a Base-64 char array" error.

这表明它不是以 base64 开始的。听起来您走错了方向 - 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);
}

关于c# - 字符串到字节数组(到字符串到 XML)并再次返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18021973/

相关文章:

python - 如何匹配字符串中的确切单词?

java - 使用 Junit TDD 是否需要在方法中返回?

java - 在 Java 中将编译时常量 int 转换为编译时常量 String

c# - Windows 10 ScrollIntoView() 没有滚动到 ListView 中间的项目

c# - SqlConnection 池似乎不起作用

C# 动态列表到静态列表

c# - 不支持“MultipleActiveResultsSets”关键字

string - 无法附加到 UDP 监听器 C# 中接收的字符串

python - 将 float 转换为 int,以便保留所有信息或如何获取长 float 的长度

c# 字符串到 float 的转换无效?