检测base64编码
Posted
技术标签:
【中文标题】检测base64编码【英文标题】:Detect base64 encoding 【发布时间】:2011-10-30 21:48:42 【问题描述】:有谁知道一个jQuery插件可以检查文本是否是随机编码的base64?我希望能够解码 base64 字符串,但前提是字符串被编码为开头。我看到了几个可以编码和解码的脚本,但我确实有一个可以检查字符串是否被编码。
这样的事情存在吗?
【问题讨论】:
相关问:***.com/questions/3355407/… 【参考方案1】:它真的必须是一个 jQuery 插件吗?只需使用简单的 javascript 正则表达式匹配:
var base64Matcher = new RegExp("^(?:[A-Za-z0-9+/]4)*(?:[A-Za-z0-9+/]2==|[A-Za-z0-9+/]3=|[A-Za-z0-9+/]4)$");
// ...
if (base64Matcher.test(someString))
// It's likely base64 encoded.
else
// It's definitely not base64 encoded.
正则表达式模式取自这个问题:RegEx to parse or validate Base64 data。
【讨论】:
不..我可以自己做扩展。谢谢。 某些文本失败,例如“灰色”是 base64 编码的字符,不是。 这正是答案说“可能”而不是“肯定”的原因。【参考方案2】:对于我来说,上述答案不包括在字符串末尾的等号(= 或 ==)填充。我已经更新了查询,以下对我有用。
var base64Matcher = new RegExp("^(?:[A-Za-z0-9+/]4)*(?:[A-Za-z0-9+/]2==|[A-Za-z0-9+/]3=|[A-Za-z0-9+/]4)([=]1,2)?$");
【讨论】:
【参考方案3】:我知道这可能会迟到回答,但这是我到目前为止提出的。在这种情况下,我在 jQuery 中使用 match。这适用于图像或文本。希望这会有所帮助
var sSampleBase64Text = 'data:text/plain;base64,MSkgTG9naW4gRGV0YWlscwogPj4gdGNfYWRtaW5fYXllZQogPj4gdHdpbmtsZXMyMnRo';
var mCheckMatchResult = sSampleBase64Text.match(/^(?:[data]4:(text|image|application)\/[a-z]*)/);
var sAlertMessage = 'Valid base 64 encode string';
if (mCheckMatchResult === null || mCheckMatchResult.length <= 0)
sAlertMessage = 'Not a valid base 64 encode string';
$('.result').append('<p>' + sAlertMessage + '</p>');
尝试在此处查找: https://jsfiddle.net/lajatomary/a8tugwe3/4/
【讨论】:
【参考方案4】:刚刚遇到这个问题并找到了可能有用的解决方案:
function safeBase64Encode(testString)
try
// If it's encoded, it will look the same in atob(btoa()) and btoa(atob())
let isEncoded = btoa(atob(testString)) == atob(btoa(testString))
if ( isEncoded )
return testString
catch (err)
// If we get an error like it's not a valid encoding, you gotta encode it.
return btoa(testString)
【讨论】:
以上是关于检测base64编码的主要内容,如果未能解决你的问题,请参考以下文章
密码学Base64 编码 ( Base64 简介 | Base64 编码原理 | 最后编码组字节不足时补位 ‘=‘ 符号 | Base64 编码实现参考 )