我需要在matlab中有一个哈希函数,它能够定义生成的哈希长度。例如,MD5可以生成长度为128位的散列。但是,我需要定义各种具有设计长度的散列函数,例如10,16,20,...
答案 0 :(得分:0)
如果您使用CalcMD5中的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
这也适用于短长度的字符串/字符数组,例如
>> myhash(100,'hello')
ans = 5d41402abc4b2a76b9719d911017c59223b431acfeb41e15d466d75de822307c99fb31087791f6317ad7c6da1433f1729436
>> myhash(2,'world')
ans =
7d
当然,'hello'的大小为10的散列将等于'hello'的大小为20的散列的前十个散列字符,但是根据所需的散列大小,它不会被要求生成非常不同的散列函数。但是,这可以通过使用所请求的散列大小对值进行盐析来轻松实现,例如。
关于Matlab中散列内容的FEX还有更多内容,例如: here