【问题标题】:How to encode and decode Base64 and Base64Url in Flutter / Dart如何在 Flutter/Dart 中对 Base64 和 Base64Url 进行编码和解码
【发布时间】:2019-10-05 15:38:05
【问题描述】:

我想在 Flutter 中对 Base64Url 中的以下字符串进行编码,并在 Dart 服务器上对其进行解码。

"username:password"

我该怎么做?以及如何在 Base64 中做到这一点?

【问题讨论】:

标签: dart flutter base64 base64url


【解决方案1】:

dart:convert 库包含用于 Base64 和 Base64Url 的编码器和解码器。但是,它们对整数列表进行编码和解码,因此对于字符串,您还需要在 UTF-8 中进行编码和解码。您可以将它们与fuse 结合使用,而不是单独进行这两种编码。

您需要有以下导入:

import 'dart:convert';

Base64

String credentials = "username:password";
Codec<String, String> stringToBase64 = utf8.fuse(base64);
String encoded = stringToBase64.encode(credentials);      // dXNlcm5hbWU6cGFzc3dvcmQ=
String decoded = stringToBase64.decode(encoded);          // username:password

请注意,这相当于:

String encoded = base64.encode(utf8.encode(credentials)); // dXNlcm5hbWU6cGFzc3dvcmQ=
String decoded = utf8.decode(base64.decode(encoded));     // username:password

Base64Url

String credentials = "username:password";
Codec<String, String> stringToBase64Url = utf8.fuse(base64Url);
String encoded = stringToBase64Url.encode(credentials);      // dXNlcm5hbWU6cGFzc3dvcmQ=
String decoded = stringToBase64Url.decode(encoded);          // username:password

同样,这相当于:

String encoded = base64Url.encode(utf8.encode(credentials)); // dXNlcm5hbWU6cGFzc3dvcmQ=
String decoded = utf8.decode(base64Url.decode(encoded));     // username:password

另见

【讨论】:

  • 而不是像utf8.decode(base64.decode(credentials));这样的结构使用Codec::fuse()方法
  • @pskink,起初我无法理解正在发生的事情(扩展后的表格感觉更易读),但后来我意识到你不需要切换@987654333 的顺序@ 和 base64。您只需在融合方法上使用decode。所以,是的,容易多了。
  • 这是因为fuse() 方法文档说:“编码时,生成的编解码器在使用other 编码之前使用this 进行编码。解码时,生成的编解码器使用@987654339 进行解码@ 在解码之前使用this。"
  • btw fuse 不限于两个编解码器 - 您可以调用多个 fuse 方法来链接两个以上的编解码器
  • @pskink 我也找到了这个:Base64Encoder().convert(credentials.codeUnits),你也可以在这里做Base64Encoder.urlSafe()。您对此有何看法?它对我来说似乎更具可读性。
猜你喜欢
  • 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
相关资源
最近更新 更多