0

我正在使用 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;
}

斯威夫特代码是:

let hashIds = Hashids(salt: salt , minHashLength: 6)
let id = hashIds.encode(number, number)

对于所有版本,我都在各自的 Hashids GitHub 存储库中使用最新的更新版本。

编辑:这是 github存储库https://github.com/tzvetkoff/hashids.c,此链接在 hashids 网站上提供:http: //hashids.org/c/

对 hashids_init3 或任何其他函数的调用不会修改其值。事实上,盐在两种语言中都是一个字符串。所以在 C 中它的 const char[] 类型和在 Swift 中它的 String 类型。salt 的值在两种语言中都保留为硬编码值,对于运行 C 代码的设备(即基于 arm 的处理器)不会改变。

4

0 回答 0