C#中字符串转Base64报错:输入非有效Base64字符串如何解决?
问题根因
你错误使用了Convert.FromBase64String()方法处理普通明文密码字符串:
- 该方法的作用仅为将符合Base64编码规则的字符串转换为对应的字节数组,无法处理任意普通字符串。
- 字符串
test刚好满足Base64编码的格式要求:长度为4的倍数,且所有字符都属于Base64合法字符集,因此凑巧没有抛出异常,但转换得到的字节数组并非你预期的"test"明文对应的字节内容,本身就是错误结果。 - 字符串
testt长度为5,不符合Base64编码长度必须为4的倍数的规则,因此直接抛出格式异常。
修复方案
如果你的需求是将用户输入的普通明文字符串转换为字节数组,应使用对应字符编码的GetBytes()方法,常用编码为UTF-8,示例代码如下:
public bool PostRegisterUser(string login, string password) { // 注意:以下仅为字符串转字节数组的逻辑示例 // 生产环境禁止直接存储明文密码对应的字节数组,请先对密码做哈希加盐处理后再存储 var bytePassword = System.Text.Encoding.UTF8.GetBytes(password); return database.CreateNewUser(login, bytePassword); }
如果你的业务逻辑确实要求前端传入Base64编码后的密码,请添加参数校验逻辑,提前判断输入字符串是否为合法Base64格式,避免运行时异常。
内容的提问来源于stack exchange,提问作者mikeyMike
相关产品推荐
相关产品推荐

