能够定义其输出生成长度的哈希函数

Hash function with ability to define its output generation length

我需要在 matlab 中有一个散列函数,它能够定义其生成的散列长度。例如,MD5 可以生成长度为 128 位的散列。但是,我需要定义各种具有设计长度的哈希函数,例如 10,16,20, ...

如果您使用 CalcMD5 package from FEX (Matlab File Exchange):

,这里有一个可能的解决方案
function hash = myhash(len, value)
% len: The desired hash length. Integer
% value: The value to hash. String.

% Set this to whatever hash length your native hash algorithm employs.
nativehashlength = 32;
if len <= nativehashlength
    % Using the CalcMD5 package to obtain MD5 hash
    hash = CalcMD5(value);
    hash = hash(1:len);
else
    % Could to a lot of stuff, but i choose to hash the repeated value
    runs = ceil(len/nativehashlength);
    hash = [];
    aggregated = value;
    for r = 1:runs
        % Compute hash and add to hash string
        hash = [hash CalcMD5(aggregated)]; %#ok
        % Update the aggregate
        aggregated = [aggregated value]; %#ok
    end
    hash = hash(1:len);
end
end

这也适用于 strings/char 个较短的数组,例如

>> myhash(100,'hello')
ans = 5d41402abc4b2a76b9719d911017c59223b431acfeb41e15d466d75de822307c99fb31087791f6317ad7c6da1433f1729436
>> myhash(2,'world') 
ans =
7d

当然,'hello' 的大小为 10 的散列将等于 'hello' 的大小为 20 的散列的前十个散列字符,但并未要求生成非常不同的散列函数,具体取决于在所需的哈希大小上。但是,这可以很容易地通过将值与请求的哈希大小一起加盐来轻松实现,例如。

FEX 上有更多关于 Matlab 中的东西散列的内容,例如here.