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