Cryptographic Protocols using Semidirect Products of Finite Groups