various implementations of ciphers