能够定义其输出生成长度的哈希函数
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.
我需要在 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.