我正在使用Hashids swift版本对数组进行编码,而我使用的是C版本,使用相同的SALT对其进行解码。复位后解码仅成功一次,之后每次解码失败。 C版本是1.1.3,Swift版本是1.1.0。虽然如果在Android上使用Java版本的Hashids完成编码,我不会遇到此问题。 Java版本是1.0.1。
C代码是:
size_t decode_hashids(const char *salt, char *hash, unsigned long long num_array[])
{
hashids_t *hashids;
hashids = hashids_init3(salt, MIN_HASH_STRLEN,HASHIDS_DEFAULT_ALPHABET);
size_t bytes_decoded = hashids_decode(hashids, hash, num_array);
hashids_free(hashids);
return bytes_decoded;
}
Swift代码是:
let hashIds = Hashids(salt: salt , minHashLength: 6)
let id = hashIds.encode(number, number)
对于所有版本,我在相应的Hashids GitHub存储库中使用最新更新版本。
编辑:这是github repo https://github.com/tzvetkoff/hashids.c,此链接在hashids网站上提供:http://hashids.org/c/
对hashids_init3或任何其他函数的调用不会修改其值。事实上,salt是两种语言中的字符串。所以在C中它的const char []类型和Swift中的String类型。 salt的值在两种语言中都被保存为硬编码值,对于运行C代码的设备(即基于arm的处理器)而言,不会改变。