如何输入可变长度字符串并输出用户定义的长度字符串?

时间:2019-05-21 06:03:48

标签: c string hash

像MD5这样的某些函数可以接受可变长度的字符串/字节数组的输入,并输出固定长度的值字节数组(即,以十六进制表示)。我想要一些标准函数,可以输入可变长度的字符串/字节数组并输出用户定义的长度字节/数组。 有什么办法吗?

2 个答案:

答案 0 :(得分:1)

您可以使用NIST.FIPS-202中定义的SHAKE-128 / SHAKE-256之类的可扩展输出功能(XOF)。

c 中,您可以实现 SHAKE-128 ,并可以按以下方式调用main():

shake128(0,shake_key,&shake_context);        //set key for shake
shake128(output_len, output_var, &shake_context) //hash function

与其创建固定长度的摘要(例如MD5 / SHA-2 / 256),它可以生成任何期望长度的输出。

答案 1 :(得分:0)

是的,这很有可能。这是一个模板:

char *foo(const char *input, size_t output_length) {
    size_t input_length = strlen(input);
    char *ret = malloc(input_length + 1);
    if(!ret) 
        return NULL;

    /* Custom code here. Maybe something like this:
       for(size_t i; i<input_length; i++) {
           ret[i] = 
    */

    return ret;
}