【问题标题】:Confusion about string encoding/decoding in Dart关于 Dart 中的字符串编码/解码的困惑
【发布时间】:2018-12-11 19:00:45
【问题描述】:

我正在尝试将 python 代码转换为 dart。它有两个部分。这是第一个:

passw = (salt + password).encode('utf8')
ha = base64.b64encode(hashlib.sha512(passw).digest())
return ha.decode('utf8')

这是第二个:

l2 = hashlib.sha512((hash_level_1 + date).encode('utf8')).digest()
return base64.urlsafe_b64encode(l2).decode('utf8')

但是,我在实现第一个 python 代码时卡住了。目前,我有这个代码:

var passw = utf8.encode(computedSalt + password);
var sha512 = pointycastle.Digest("SHA-512");
var result = base64.encode(sha512.process(passw));
_key = utf8.decode(result);

但这不起作用,因为base64.encode 提供字符串,而utf8.decode 需要字节。如何将 python 代码翻译成飞镖?在第一个 python 代码的最后两行转换成什么?我对转换系统感到困惑,不知道该怎么办。

【问题讨论】:

    标签: python utf-8 dart format base64


    【解决方案1】:

    我已经解决了。

    var passw = utf8.encode(computedSalt + password);
    var sha512 = pointycastle.Digest("SHA-512");
    var result = base64.encode(sha512.process(passw));
    return result;
    

    var result = sha512.process(utf8.encode(_key + date));
    return base64.encode(result)
    

    施展了魔法。

    在第一个代码中,passw 是字节格式,通过 utf8 编码。然后,我用 sha512 对其进行散列并编码为 base64。 dart 中不需要额外调用 python 代码 (ha.decode('utf8'))。

    在第二个代码块中与第一个基本相同。然而,在某些情况下,python 对 base64 的编码似乎略有不同——它可能是 urlsafe 变体。我通过在结果中将+ 替换为-/ 替换为_ 暂时解决了这个问题。

    【讨论】:

    • 是的,这正是urlsafe_b64encode 函数的作用——check the docs。在那里您还可以看到 Python 的 base64 库始终处理 bytes→bytes,这就是为什么您需要最终的 .decode('utf8') 来获取字符串。
    • 你可以使用base64UrlEncode函数在Dart中做URL安全的base64编码。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多