Sarnold 2007-11-04 Here's a small proc called mix-word which mixes a word in a way it is not recognizable. I often use mixed-words in which letters are replaced by digits, as passwords, and mix-word quite produce interesting passwords.
#Usage : mix-word word ?digit-proba? ?uppercase-proba? # word : the word to mix # proba : a probability between 0.0 and 1.0 proc mix-word {word {digit 0.3} {upper 0.5}} { foreach letter [split [string tolower $word] ""] { append mixed [letter-case [random-match $letter $digit] $upper] } set mixed } proc random-match {char proba} { if {rand()<$proba} {return [make-match $char]} {return $char} } proc letter-case {char upper} { if {rand()<$upper} {return [string toupper $char]} set char } proc make-match char { array set matches [matches] if {[info exists matches($char)]} {return $matches($char)} return $char } proc matches {} {split a4b3c0d2e9f7g6h4i1j1k3l1m8o0q9r2s5t4v0x8y9z7 ""}
See also Password Gorilla for a password manager application.