0
我在尝试移植使用scrypt生成密码的python脚本。将C uint8_t转换为python utf_16_be
import pylibscrypt
scrypt = pylibscrypt.scrypt
password = 'test123'.encode("utf_16_be", "replace")
salt = '384eaed91035763e'.decode('hex')
key = scrypt(password, salt, 16384, 8, 1, 32)
print (key.encode('hex'))
结果应该是:9f2117416c7b2de9419a81c4625a28e40c16ac92aaa3000bb2c35844b3839eb1
在C中,我使用libsodium crypto_pwhash_scryptsalsa208sha256_ll()函数。
如果我试图从变量传递密码:
const uint8_t password[] = "test123";
我没有得到相同的密钥。我试图从python脚本中移除“.encode(”utf_16_be“,”replace“)”,然后我得到相同的结果。
那么我怎样才能转换我的C变量是相同的python变量?
编辑:原始软件是在Java中,似乎编码字符串为UTF-16大端。现在我需要将C字符串编码为相同的格式。
为什么不把它编码为ASCII?密码是否有可能包含任何非ascii字符? –
我认为python软件必须支持unicode,所以这就是为什么它不是ascii。 – 01BTC10
既然它是一个密码,你可能会限制它只ascii-only .. –