#!/usr/bin/perl -w # # $Id: shaname,v 1.1 2009/01/05 03:41:22 vogelke Exp $ # # Use SHA512 hash to create 16-character signature for string. use strict; use Carp; use Digest::SHA qw/sha512_hex/; my $hash; while (<>) { chomp; $hash = hash2name($_); print "$hash:$_\n"; } exit(0); # ------------------------------------------------------------------------ # Use every 8th character from SHA512 as a hash value. # Yeah, I know you're not supposed to do that because it's not # "guaranteed unique". Sue me. sub hash2name { my $data = shift(@_) or croak "no string\n"; my $name = ''; my $hash = sha512_hex($data); my $max = 128; # 512 bits = 128 hex characters my $k = 0; while ($k < $max) { $name .= substr($hash, $k, 1); $k += 8; } return ($name); }