为啥使用 Convert.FromBase64String(...) 将字符串转换为 byte[] 时,我不能放两个相同的字符? [复制]

Posted

技术标签:

【中文标题】为啥使用 Convert.FromBase64String(...) 将字符串转换为 byte[] 时,我不能放两个相同的字符? [复制]【英文标题】:Why when converting string to byte[] using Convert.FromBase64String(...) i can't put two same characters? [duplicate]为什么使用 Convert.FromBase64String(...) 将字符串转换为 byte[] 时,我不能放两个相同的字符? [复制] 【发布时间】:2022-01-09 23:54:45 【问题描述】:

为什么在使用 Convert.FromBase64String(...) 将字符串转换为 byte[] 时,我不能输入两个相同的字符?

例如我有

 class User

    public string Login  get; set; 
    public byte[] Password  get; set; 


class Program

    static void Main(string[] args)
    
        var login = Console.ReadLine();
        var password = Console.ReadLine();
        var bytePass = Convert.FromBase64String(password);

        var user = new User()  Login = login, Password = bytePass ;

    

当我用两个相同的字符(例如“testt”)作为密码字符串时,它会抛出异常

System.FormatException:“输入不是有效的 Base-64 字符串,因为它包含非 base-64 字符、两个以上的填充字符或填充字符中的非法字符。”

如果我想将多个相同字符的字符串转换为字节[],我应该怎么做?有没有可能?

【问题讨论】:

您使用的是FromBase64String,因此密码应该是base64strin 而不是testt Convert.FromBase64String(...) 将 base64 编码的字符串转换为字节数组。您的输入字符串不是 base64 编码的,这就是您收到此错误的原因。你能解释一下你想要做什么吗?为什么要使用 Convert.FromBase64String(...)? @Alen.Toma 那么,有没有一种方法可以做到这一点? @Chetan 试图将字符串值转换为 byte[] 值 请告诉我你不会在没有散列和加盐的情况下存储密码? 【参考方案1】:

字符串testt 不是a Base64-encoded string。 Base64 字符串的长度必须是四的倍数。

要将常规字符串转换为字节序列,请使用the Encoding.GetBytes method。

【讨论】:

以上是关于为啥使用 Convert.FromBase64String(...) 将字符串转换为 byte[] 时,我不能放两个相同的字符? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

ES 512 jwt 令牌验证

用于将字符串编码为Base64的备用Java方法

支付宝IOT小程序AES密钥解密

C# Tips: String Convert to byte[]

图片和Base64之间的转换

音频的 Base64 验证