Posted to tcl by patthoyts at Mon Feb 26 23:43:52 GMT 2007view pretty
# Requires some reliable and secret method to exchange the secret.
package require blowfish
package require base64
package require md5
proc CreateKey {secret} {
return [blowfish::Init cbc $secret [string repeat \0 8]]
}
proc Enc {key data} {
# shoud be the best random data you can get.
set iv [string range [md5::md5 [clock clicks]:[pid]:[expr {rand()}]] 0 7]
blowfish::Reset $key $iv
set c [blowfish::Encrypt $key $data]
return [base64::encode $iv$c]
}
proc Dec {key pkt} {
set data [base64::decode $pkt]
set iv [string range $data 0 7]
set data [string range $data 8 end]
blowfish::Reset $key $iv
return [blowfish::Decrypt $key $data]
}