【问题标题】:C# - Base64 validator mistakes numbers with Base64 stringC# - Base64 验证器错误的数字与 Base64 字符串
【发布时间】:2021-02-16 11:57:53
【问题描述】:

我这里有个比较奇怪的问题,我有以下 Base64 验证器

        public static bool IsBase64String(this string base64)
        {
            Span<byte> buffer = new Span<byte>(new byte[base64.Length]);
            return Convert.TryFromBase64String(base64, buffer, out int bytesParsed);
        }

然而奇怪的是,它认为下面的字符串是base64!不知道出了什么问题。

5355220565819095

我正在使用 .Net 5。

我要做什么

我需要将一个字节数组转换为 Base64 ,存储它然后能够判断它是否是 base64 然后我可以将它转换回 bytes[] 基本上是一种存储字节的有效方式!

【问题讨论】:

标签: c# .net cryptography console-application


【解决方案1】:

如果这只适用于信用卡号,您只需检查长度(顺便说一句,我怀疑存储信用卡号是个好主意)。

MasterCard 和 Visa 使用 16 位数字,而 AmEx 使用 15 位数字,通过快速搜索,我发现一些鲜为人知的卡可以在 13 到 19 位之间变化。

13 位卡号会生成 20 个字符的 base64 字符串(包括“==”填充)。所以最后你需要检查的是你的字符串的长度,如果它小于 20 个字符,它要么是无效的,要么是一个普通的卡号,任何 20 个或更多的字符都应该被解码。

编辑:我忘记了 AES 加密字节数组,但这更适用。

【讨论】:

  • 这是个好主意,谢谢,但是我还有其他类型的条目需要加密!如地址或姓名。所以基本上所有的个人信息都被加密了!
  • 在这种情况下,您必须添加上下文验证。以上将有助于信用卡,测试长度模 4 是否为零,地址通常包含空格,而 base64 不应该(如:忽略它们,我猜你不会将 json 值拆分为多行)。将名字拆分为名字和姓氏时,可能确实是个问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多