Go bindings for mcrypt library.
Should be compatible with most algo/modes supported by libmcrypt.
- libmcrypt (http://mcrypt.sourceforge.net/)
package main
import (
"fmt"
mcrypt "github.com/mfpierre/go-mcrypt"
)
func main() {
key := []byte("here is a random key of 32 bytes")
plaintext := []byte("here is what you want to encrypt")
iv := make([]byte, 16)
// using CAST-256 in ECB mode
encrypted, _ := mcrypt.Encrypt(key, iv, plaintext, "cast-256", "ecb")
decrypted, _ := mcrypt.Decrypt(key, iv, encrypted, "cast-256", "ecb")
fmt.Println(encrypted)
fmt.Println(decrypted)
}Below a reminder of IV & Key size that you can use depending on algo/mode settings
| Cipher Name | Block Mode | Block Size | IV Size | Default Key Size | All Key Size(s) |
|---|---|---|---|---|---|
| CAST-128 | CBC | 8 | 8 | 16 | 16 |
| CAST-128 | ECB | 8 | 8 | 16 | 16 |
| CAST-128 | OFB | 8 | 8 | 16 | 16 |
| CAST-128 | NOFB | 8 | 8 | 16 | 16 |
| CAST-128 | CFB | 8 | 8 | 16 | 16 |
| CAST-128 | NCFB | 8 | 8 | 16 | 16 |
| CAST-128 | CTR | 8 | 8 | 16 | 16 |
| GOST | CBC | 8 | 8 | 32 | 32 |
| GOST | ECB | 8 | 8 | 32 | 32 |
| GOST | OFB | 8 | 8 | 32 | 32 |
| GOST | NOFB | 8 | 8 | 32 | 32 |
| GOST | CFB | 8 | 8 | 32 | 32 |
| GOST | NCFB | 8 | 8 | 32 | 32 |
| GOST | CTR | 8 | 8 | 32 | 32 |
| Rijndael-128 | CBC | 16 | 16 | 32 | 16 24 32 |
| Rijndael-128 | ECB | 16 | 16 | 32 | 16 24 32 |
| Rijndael-128 | OFB | 16 | 16 | 32 | 16 24 32 |
| Rijndael-128 | NOFB | 16 | 16 | 32 | 16 24 32 |
| Rijndael-128 | CFB | 16 | 16 | 32 | 16 24 32 |
| Rijndael-128 | NCFB | 16 | 16 | 32 | 16 24 32 |
| Rijndael-128 | CTR | 16 | 16 | 32 | 16 24 32 |
| Twofish | CBC | 16 | 16 | 32 | 16 24 32 |
| Twofish | ECB | 16 | 16 | 32 | 16 24 32 |
| Twofish | OFB | 16 | 16 | 32 | 16 24 32 |
| Twofish | NOFB | 16 | 16 | 32 | 16 24 32 |
| Twofish | CFB | 16 | 16 | 32 | 16 24 32 |
| Twofish | NCFB | 16 | 16 | 32 | 16 24 32 |
| Twofish | CTR | 16 | 16 | 32 | 16 24 32 |
| RC4 | STREAM | 1 | 0 | 256 | |
| CAST-256 | CBC | 16 | 16 | 32 | 16 24 32 |
| CAST-256 | ECB | 16 | 16 | 32 | 16 24 32 |
| CAST-256 | OFB | 16 | 16 | 32 | 16 24 32 |
| CAST-256 | NOFB | 16 | 16 | 32 | 16 24 32 |
| CAST-256 | CFB | 16 | 16 | 32 | 16 24 32 |
| CAST-256 | NCFB | 16 | 16 | 32 | 16 24 32 |
| CAST-256 | CTR | 16 | 16 | 32 | 16 24 32 |
| LOKI97 | CBC | 16 | 16 | 32 | 16 24 32 |
| LOKI97 | ECB | 16 | 16 | 32 | 16 24 32 |
| LOKI97 | OFB | 16 | 16 | 32 | 16 24 32 |
| LOKI97 | NOFB | 16 | 16 | 32 | 16 24 32 |
| LOKI97 | CFB | 16 | 16 | 32 | 16 24 32 |
| LOKI97 | NCFB | 16 | 16 | 32 | 16 24 32 |
| LOKI97 | CTR | 16 | 16 | 32 | 16 24 32 |
| Rijndael-192 | CBC | 24 | 24 | 32 | 16 24 32 |
| Rijndael-192 | ECB | 24 | 24 | 32 | 16 24 32 |
| Rijndael-192 | OFB | 24 | 24 | 32 | 16 24 32 |
| Rijndael-192 | NOFB | 24 | 24 | 32 | 16 24 32 |
| Rijndael-192 | CFB | 24 | 24 | 32 | 16 24 32 |
| Rijndael-192 | NCFB | 24 | 24 | 32 | 16 24 32 |
| Rijndael-192 | CTR | 24 | 24 | 32 | 16 24 32 |
| Safer+ | CBC | 16 | 16 | 32 | 16 24 32 |
| Safer+ | ECB | 16 | 16 | 32 | 16 24 32 |
| Safer+ | OFB | 16 | 16 | 32 | 16 24 32 |
| Safer+ | NOFB | 16 | 16 | 32 | 16 24 32 |
| Safer+ | CFB | 16 | 16 | 32 | 16 24 32 |
| Safer+ | NCFB | 16 | 16 | 32 | 16 24 32 |
| Safer+ | CTR | 16 | 16 | 32 | 16 24 32 |
| WAKE | STREAM | 1 | 0 | 32 | 32 |
| Blowfish | CBC | 8 | 8 | 56 | |
| Blowfish | ECB | 8 | 8 | 56 | |
| Blowfish | OFB | 8 | 8 | 56 | |
| Blowfish | NOFB | 8 | 8 | 56 | |
| Blowfish | CFB | 8 | 8 | 56 | |
| Blowfish | NCFB | 8 | 8 | 56 | |
| Blowfish | CTR | 8 | 8 | 56 | |
| DES | CBC | 8 | 8 | 8 | 8 |
| DES | ECB | 8 | 8 | 8 | 8 |
| DES | OFB | 8 | 8 | 8 | 8 |
| DES | NOFB | 8 | 8 | 8 | 8 |
| DES | CFB | 8 | 8 | 8 | 8 |
| DES | NCFB | 8 | 8 | 8 | 8 |
| DES | CTR | 8 | 8 | 8 | 8 |
| Rijndael-256 | CBC | 32 | 32 | 32 | 16 24 32 |
| Rijndael-256 | ECB | 32 | 32 | 32 | 16 24 32 |
| Rijndael-256 | OFB | 32 | 32 | 32 | 16 24 32 |
| Rijndael-256 | NOFB | 32 | 32 | 32 | 16 24 32 |
| Rijndael-256 | CFB | 32 | 32 | 32 | 16 24 32 |
| Rijndael-256 | NCFB | 32 | 32 | 32 | 16 24 32 |
| Rijndael-256 | CTR | 32 | 32 | 32 | 16 24 32 |
| Serpent | CBC | 16 | 16 | 32 | 16 24 32 |
| Serpent | ECB | 16 | 16 | 32 | 16 24 32 |
| Serpent | OFB | 16 | 16 | 32 | 16 24 32 |
| Serpent | NOFB | 16 | 16 | 32 | 16 24 32 |
| Serpent | CFB | 16 | 16 | 32 | 16 24 32 |
| Serpent | NCFB | 16 | 16 | 32 | 16 24 32 |
| Serpent | CTR | 16 | 16 | 32 | 16 24 32 |
| xTEA | CBC | 8 | 8 | 16 | 16 |
| xTEA | ECB | 8 | 8 | 16 | 16 |
| xTEA | OFB | 8 | 8 | 16 | 16 |
| xTEA | NOFB | 8 | 8 | 16 | 16 |
| xTEA | CFB | 8 | 8 | 16 | 16 |
| xTEA | NCFB | 8 | 8 | 16 | 16 |
| xTEA | CTR | 8 | 8 | 16 | 16 |
| Blowfish | CBC | 8 | 8 | 56 | |
| Blowfish | ECB | 8 | 8 | 56 | |
| Blowfish | OFB | 8 | 8 | 56 | |
| Blowfish | NOFB | 8 | 8 | 56 | |
| Blowfish | CFB | 8 | 8 | 56 | |
| Blowfish | NCFB | 8 | 8 | 56 | |
| Blowfish | CTR | 8 | 8 | 56 | |
| enigma | STREAM | 1 | 0 | 13 | |
| RC2 | CBC | 8 | 8 | 128 | |
| RC2 | ECB | 8 | 8 | 128 | |
| RC2 | OFB | 8 | 8 | 128 | |
| RC2 | NOFB | 8 | 8 | 128 | |
| RC2 | CFB | 8 | 8 | 128 | |
| RC2 | NCFB | 8 | 8 | 128 | |
| RC2 | CTR | 8 | 8 | 128 | |
| 3DES | CBC | 8 | 8 | 24 | 24 |
| 3DES | ECB | 8 | 8 | 24 | 24 |
| 3DES | OFB | 8 | 8 | 24 | 24 |
| 3DES | NOFB | 8 | 8 | 24 | 24 |
| 3DES | CFB | 8 | 8 | 24 | 24 |
| 3DES | NCFB | 8 | 8 | 24 | 24 |
| 3DES | CTR | 8 | 8 | 24 | 24 |
Thanks to https://github.com/tblyler/go-mcrypt for initial implementation with rijndael