how i can generate reverse of this below method(hash2string)-this method generate string2hash value...i have required an output- text as given in input side.

3 次查看(过去 30 天)
function hash=string2hash(str,type)
% This function generates a hash value from a text string
%
% hash=string2hash(str,type);
%
% inputs,
% str : The text string, or array with text strings.
% outputs,
% hash : The hash value, integer value between 0 and 2^32-1
% type : Type of has 'djb2' (default) or 'sdbm'
%
% From c-code on : http://www.cse.yorku.ca/~oz/hash.html
%
% djb2
% this algorithm was first reported by dan bernstein many years ago
% in comp.lang.c
%
% sdbm
% this algorithm was created for sdbm (a public-domain reimplementation of
% ndbm) database library. it was found to do well in scrambling bits,
% causing better distribution of the keys and fewer splits. it also happens
% to be a good general hashing function with good distribution.
%
% example,
%
% hash=string2hash('hello world');
% disp(hash);
%
% Function is written by D.Kroon University of Twente (June 2010)
% From string to double array
str=double(str);
if(nargin<2), type='djb2'; end
switch(type)
case 'djb2'
hash = 5381*ones(size(str,1),1);
for i=1:size(str,2),
hash = mod(hash * 33 + str(:,i), 2^32-1);
end
case 'sdbm'
hash = zeros(size(str,1),1);
for i=1:size(str,2),
hash = mod(hash * 65599 + str(:,i), 2^32-1);
end
otherwise
error('string_hash:inputs','unknown type');
end
  1 个评论
SAURABH
SAURABH 2013-6-10
编辑:Walter Roberson 2013-6-10
str=double(str);
if(nargin<2), type='djb2'; end
switch(type)
case 'djb2'
hash = 5381*ones(size(str,1),1);
for i=1:size(str,2),
hash = mod(hash * 33 + str(:,i), 2^32-1);
end
case 'sdbm'
hash = zeros(size(str,1),1);
for i=1:size(str,2),
hash = mod(hash * 65599 + str(:,i), 2^32-1);
end
otherwise
error('string_hash:inputs','unknown type');
end

请先登录,再进行评论。

回答(1 个)

Walter Roberson
Walter Roberson 2013-6-10
You cannot reverse that hash function. See http://dmytry.blogspot.ca/2009/11/horrible-hashes.html and notice
What is so stupid about it? For starters, even though the output of this function is 32 bits, not even for the 2 char ASCII strings do you have a guarantee for lack of collisions. In fact "SV" collides with "Pt", and "g5" collides with "as" [in the second version that uses xor], just to name two examples out of hundreds.
Therefor if your input string was even only as long as 2 characters, you might well not be able to reverse it because there would be other 2 character input strings that hashed to the same output string.

类别

Help CenterFile Exchange 中查找有关 Characters and Strings 的更多信息

标签

尚未输入任何标签。

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by