#!/usr/bin/perl -w use strict; my $password= "Not really"; hide( $password, "none of your business" ); print "password=($password), hide=(",hide($password),")\n"; $password= "No!"; print "password=($password), hide=(",hide($password),")\n"; # Prints: #password=(Not really), hide=(none of your business) #password=(No!), hide=(none of your business) #### sub hide { my( $new )= 1<@_ ? pop : undef; my $secret; my( $p2, $rc, $f )= unpack "LLL", unpack "P12", pack "L", \$_[0]; if( 5 == unpack "C", pack "V", $f ) { my( $pv, $cur, $siz, $iv )= unpack "L4", unpack "P16", pack "L", $p2; $secret= unpack "P$iv", pack "L", $pv-$iv; } if( defined $new ) { $_[0]= $new . $_[0]; substr( $_[0], 0, length($new) )= ""; } return $secret; }