Convert.ToBase64String方法输出值不正确的原因排查
问题分析与解决
你的问题核心是编码逻辑不匹配:
- 当前代码直接对原始
byte[]做Base64编码,得到的XlU8QD5FTUGDFH1uiIBXcA==是该操作的正确结果。 - 但你预期的Base64,是先把
byte[]转换成十六进制字符串,再对这个字符串的UTF-8字节做Base64编码的产物。
验证过程
拿你提供的输入byte[] {94, 85, 60, 64, 62, 69, 77, 65, 131, 20, 125, 110, 136, 128, 87, 112}来说:
- 转无分隔符的十六进制字符串:
5E553C403E494D4183147D6E88805770 - 对这个字符串的UTF-8字节做Base64编码,正好得到你预期的
MHg1RTU1M0M0MDNFNDU0RDQxODMxNDdENkU4ODgwNTc3MA==(开头的0x是额外拼接的,不影响核心逻辑)
修正代码
调整编码逻辑,先转十六进制字符串再做Base64编码:
byte[] originalBytes = SQLDataHelper.EncryptAddValue(modifiedField.Value[nameof(RecordHistoryField.PreviousValue)]); // 1. 将byte[]转为无分隔符的十六进制字符串 string hexString = BitConverter.ToString(originalBytes).Replace("-", string.Empty); // 2. 将十六进制字符串转为UTF-8字节数组 byte[] hexBytes = Encoding.UTF8.GetBytes(hexString); // 3. 转换为目标Base64字符串 string output = Convert.ToBase64String(hexBytes);
内容的提问来源于stack exchange,提问作者gtighe
相关产品推荐
相关产品推荐

