2016-03-05 137 views
-2

的想法是让什么是7个字符长字符串产生这个号码:3552907293224这个脚本:如何反转这个哈希函数?

sub hash { 
    my $nr = 13; 
    for (split //, shift) { 
      $nr = $nr * 43 + index("acdegijmnoprstuw", $_); 
    } 
    return $nr; 
} 

我设法弄清楚它的“eddigjo”(带手动尝试)的字符串,但我需要一个反向追踪可能会产生上述数字的函数。

回答

3

我会咬,即使你没有把精力投入到解决问题:

use strict; 
use warnings; 

use feature qw(say); 

my @alphabet = split //, "acdegijmnoprstuw"; #/ 
sub reverse_hash { 
    my ($n) = @_; 

    my @letters; 
    while ($n > 43) { 
     unshift @letters, $alphabet[$n % 43]; 
     $n /= 43; 
    } 

    return join '', @letters; 
} 

say reverse_hash(3552907293224); 
# eddigjo 
+0

谢谢您的回答。我是Perl的新手,我试图弄清楚这两天,但我没有得到任何解决方案,这就是为什么我在这里问。 –

+6

任何人都不可能知道你已经做了什么尝试,因为他们不包括在问题中。 –