关于Dart中字符串编码/解码的困惑

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于Dart中字符串编码/解码的困惑相关的知识,希望对你有一定的参考价值。

我正在尝试将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代码翻译为dart?什么转换成第一个python代码的最后两行?我对转换系统感到困惑,我不知道该怎么做。

答案

我修好了。

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中。在飞镖中不需要使用python代码(ha.decode('utf8'))进行额外调用。

在第二个代码块中与第一个代码块基本相同。但是,在某些情况下,python似乎编码base64略有不同 - 它可能是urlsafe变体。我暂时通过+替换-/在结果中替换_

以上是关于关于Dart中字符串编码/解码的困惑的主要内容,如果未能解决你的问题,请参考以下文章

Google Protocol Buffers - 对编码解码 base64 char * c 字符串协议缓冲区数据感到困惑

在 Dart 中解码 HTML 编码的文本

▲Dart-‘dart:convert’库

C#解码base64编码的二进制数据的代码

dart base64的编码与解码

Dart: 编码和解码各种存档和压缩格式