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

时间:2018-12-11 19:00:45

标签: python utf-8 dart format base64

我正在尝试将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代码的最后两行中,什么转换成什么?我对转换系统感到困惑,不知道该怎么办。

1 个答案:

答案 0 :(得分:0)

我已经解决了。

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变体。我通过在结果中将+替换为-并将/替换为_来暂时解决了这个问题。