C语言 如何使用uuid_generate_sha1生成v5 UUID

flvtvl50  于 2022-12-02  发布在  其他
关注(0)|答案(2)|浏览(187)

我想使用给定的命名空间为字符串生成一个v5 UUID。
https://man.archlinux.org/man/uuid_generate_time.3.en讨论了uuid_generate_sha1(),但我找不到任何关于如何在我们的代码中使用它们的好例子。
我的伪代码如下所示:

_generate_v5_uuid(const char *inputStr, const char *namespace, char **outputString)
{
        uuid_t uuid;
        uuid_generate_sha1(inputStr, &uuid);

        *outputStr = convert_uuid_to_string(uuid);
        return;
}

到底需要传递什么给uuid_generate_sha1

mcvgt66p

mcvgt66p1#

我已经为你写了这个例子:

#include <uuid/uuid.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

char *convert_uuid_to_string(uuid_t uuid) {
    char *buf = NULL;
    size_t s = 0;
    FILE *f = open_memstream(&buf, &s);
    for (size_t i = 0; i < 16; ++i) {
        fprintf(f, "%02x", uuid[i]);
    }
    fclose(f);
    return buf;
}

char *generate_v5_uuid(const char *inputStr, const char *namespace) {
    const uuid_t *ns = uuid_get_template(&namespace[1]);
    uuid_t uuid;
    uuid_generate_sha1(uuid, *ns, inputStr, strlen(inputStr));
    return convert_uuid_to_string(uuid);
}

int main() {
    system("set -x ; uuidgen --sha1 -n @url -N string");
    printf("%s\n", generate_v5_uuid("string", "@url"));
}

程序输出:

$ ./a.out 
+ uuidgen --sha1 -n @url -N string
64be9091-88e8-5476-996b-8b541f7bf3e5
64be909188e85476996b8b541f7bf3e5
vuktfyat

vuktfyat2#

char *generate_v5_uuid(const char *inputStr, const char *namespace)
{
    uuid_t ns;
    uuid_parse(namespace, ns);
    uuid_t uuid;
    uuid_generate_sha1(uuid, ns, inputStr, strlen(inputStr));
    char str[UUID_STR_LEN];
    uuid_unparse(uuid, str);
    return strdup(str);
}

相关问题