通过 JavaScript 进行 Base64URL 解码?
所以我很困惑。我知道有很多用于 JS 的 Base64 编码器/解码器,但没有用于修改后的(以及 Facebook 喜欢的)Base64URL 变体。到目前为止,在 stackoverflow 上的搜索已经一无所获。
是的,我可以使用 PHP 或其他服务器端库来解码它,但我试图保持它的通用性,无论我使用什么平台......例如,如果我要托管一个仅 HTML 的 Facebook 应用程序在 Amazon S3/CloudFront 上,仅使用其 JS SDK 和 jQuery 来处理表单和获取数据。
也就是说,有人知道 JavaScript 的 Base64URL 特定解码器吗?
提前致谢!
So I'm stumped. I know there's lots of Base64 encoders/decoders for JS, but not for the modified (and Facebook-favored) Base64URL variation. So far searching across stackoverflow has come up dry.
Yes, I could use PHP or another server-side library to decode this, but I'm trying to keep this universal regardless of what platform I'm using... for example, if I were to host a HTML-only Facebook app on Amazon S3/CloudFront and only use their JS SDK and jQuery to take care of processing forms and getting data.
That said, does anyone know of any Base64URL-specific decoders for JavaScript?
Thanks in advance!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
解码前使用此功能:
使用此功能后,您可以使用任何 Base64 解码器
Use this before decoding :
After using this function you can use any base64 decoder
使用
TextEncoder
接口和btoa()
函数,并将+
替换为-
和/
替换为_
。最后,删除在 Base64 填充期间添加的尾随=
字符。对于解码,过程相反。编码
解码
Using the
TextEncoder
interface along with thebtoa()
function and replace+
with-
, and/
is replaced with_
. Finally, remove trailing=
characters added during base64 padding. For Decoding, the process is reversed.Encode
Decode
解决方案:
使用这个出色的 Base64 编码/解码: http:// /code.google.com/p/stringencoders/source/browse/trunk/javascript/base64.js
还取决于 padRight 方法:
Solution:
Using this great base64 encode/decode: http://code.google.com/p/stringencoders/source/browse/trunk/javascript/base64.js
Also depends on the padRight method:
mohamed 的回答非常有帮助,谢谢!
如果您遇到这种情况:
throw new Error("InvalidLengthError: 输入的 base64url 字符串长度不正确,无法确定填充");
...您可能正在使用它来解码 JSON Web 令牌 (JWT)。
但为此,您需要(在替换需要替换的字符之后)正确拆分 JWT 的 3 个部分(“.”字符),然后在尝试使用该答案中的代码进行解码之前填充每个部分( https://stackoverflow.com/a/51838635/1143126)。
要快速查看 JWT 内部,如果不重要,您可以使用 https://jwt.io/安全性(例如,如果仅用于本地测试)。
The answer by mohamed was really helpful, thanks!
If this happens for you:
throw new Error("InvalidLengthError: Input base64url string is the wrong length to determine padding");
... you may be using it to decode a JSON Web Token (JWT).
But for this, you need to (after replacing the characters that need replacing) split apart the 3 parts of the JWT properly ("." character), and then pad each before attempting to decode using the code from that answer ( https://stackoverflow.com/a/51838635/1143126 ).
For a quick look inside your JWT, you could just use https://jwt.io/ if it's not critical to security (if it's just for a local test, for example).
我认为进行Base64/Base64URL解码最有效的方法是直接在函数中解码,而不是将Base64URL更改为Base64然后解码。我编写了一个可以直接解码 Base64 和 Base64URL 的函数,无需任何其他依赖。
为了使用此函数来解码 Base64URL 字符串,我使用 JWT 令牌作为示例。首先,我分割了令牌。然后,我解码 JWT 有效负载,然后将其解析为 JSON 对象。
I think the most efficient way of doing Base64/Base64URL decoding is to decode directly in a function instead of changing Base64URL into Base64 and then decoding it. I wrote a function that can decode both Base64 and Base64URL directly without any other dependency.
To use this function to decode the Base64URL string, I use JWT token as an example. First, I split the token. Then, I decode the JWT payload and then parse it into JSON object.