arcipher

module
v0.2.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: May 3, 2026 License: MIT

README

arcipher Go Reference

arcipher logo

A Go library and CLI tool for classical cryptography and cryptanalysis. Provides implementations of historical ciphers with file processing and concurrent operations.

Overview

Library: Core cipher implementations and cryptanalysis algorithms for use in Go projects.

CLI: arcipher command-line tool for encrypting, decrypting, and analyzing text and files with support for concurrent block processing.

Ciphers
Cipher Name Cipher Type Variant
Rail Fence Permutation
Caesar Substitution
Cardan Hole Permutation
Vigenere Polyalphabetic Substitution Autokey (-a)
Affine Polygraphic Substituion Hill
Analyzers
Analyzer Name Ciphers
Frequency Analysis Caesar
Kasiski Test & Frequency Analysis Vigenere
Padding
Padding Scheme
ISOIEC7816
Math Utilities

Matrix operations and modular arithmetic utilities for classical cipher implementations.

Installation

Prerequisites
  • Go 1.25.5 or later
As a Library
go get github.com/ItakawaM/arcipher
As a CLI Tool

macOS / Linux:

go build -o arcipher ./cmd/arcipher

or

make build BINARY=arcipher

Windows:

go build -o arcipher.exe ./cmd/arcipher

or

make build

Library Usage

package main

import "github.com/ItakawaM/arcipher/ciphers"

func main() {
 // Create a new cipher
 cipher, err := ciphers.NewCaesarCipher(12)
 if err != nil {
  // Process error
 }

 // Create source and destination buffers
 src := []byte("HelloWorld")
 dst := make([]byte, len(src))

 // Perform action
 if err := cipher.EncryptBlock(dst, src); err != nil {
  // Process error
 }

 // Alternatively, you can alias buffers if the desired cipher allows it
 if cipher.IsInPlace() {
  if err := cipher.EncryptBlock(src, src); err != nil {
   // Process error
  }
 }
}

CLI Usage

Basic pattern:

arcipher <CIPHER> <ACTION> <ARGS> [FLAGS]

Getting help:

arcipher <COMMAND> --help

Verbose output:

arcipher <COMMAND> --verbose
Railfence
Message Encryption/Decryption with key 3
arcipher railfence encrypt 3 "helloworld" 
arcipher railfence decrypt 3 "loelwrdhol"
File Encryption/Decryption with key 10 using 4 threads and blocks of size 1024KB and verbose output
arcipher railfence encrypt 10 ./example/SunPoem ./example/SunPoem.enc --block 1024 --threads 4 -v
arcipher railfence decrypt 10 ./example/SunPoem.enc ./example/SunPoem --block 1024 --threads 4 -v
Caesar
Message Encryption/Decryption with key 15
arcipher caesar encrypt 15 "helloworld"
arcipher caesar decrypt 15 "wtaadldgas"
Message Bruteforce and Frequency Analysis
arcipher caesar bruteforce "wtaadldgas"
arcipher caesar analyze "wtaadldgas"
File Encryption/Decryption with key 5 using 2 threads and blocks of size 256KB
arcipher caesar encrypt 5 ./example/SunPoem ./example/SunPoem.enc --block 256 --threads 2
arcipher caesar decrypt 5 ./example/SunPoem.enc ./example/SunPoem --block 256 --threads 2
File Bruteforce using 6 threads and blocks of size 2048KB and Frequency Analysis
arcipher caesar bruteforce ./example/SunPoem /example/SunPoem_Directory -t 6 -b 2048
arcipher caesar analyze ./example/SunPoem
Cardan
Message Encryption/Decryption via interactive browser UI and key export
arcipher cardan encrypt "helloworld" --export key.json
arcipher cardan decrypt "h lowd e ol  lr "
Message Encryption/Decryption with exported/generated key
arcipher cardan encrypt ./key.json "helloworld"
arcipher cardan decrypt ./key.json "h lowd e ol  lr "
Generate a key for a 5x5 grid
arcipher cardan generate-key 5 key.json
File Encryption/Decryption with key and 4 threads
arcipher cardan encrypt key.json ./example/SunPoem ./example/SunPoem.enc --threads 4 -v
arcipher cardan decrypt key.json ./example/SunPoem.enc ./example/SunPoem --threads 4 -v
Vigenere
Message Encryption/Decryption with key "Secret"
arcipher vigenere encrypt "Secret" "helloworld"
arcipher vigenere decrypt "Secret" "zincspgvnu"
Message Dictionary Bruteforce and Kasiski-Frequency Analysis
arcipher vigenere bruteforce ./example/dict.txt "zincspgvnu"
arcipher vigenere analyze "zincspgvnu"
File Encryption/Decryption with key "Keyword" using 4 threads and blocks of size 512KB
arcipher vigenere encrypt "Keyword" ./example/SunPoem ./example/SunPoem.enc --block 512 --threads 4
arcipher vigenere decrypt "Keyword" ./example/SunPoem.enc ./example/SunPoem --block 512 --threads 4
File Dictionary Bruteforce using 4 threads and Kasiski-Frequency Analysis
arcipher vigenere bruteforce ./example/dict.txt ./example/SunPoem /example/SunPoem_Directory --threads 4
arcipher vigenere analyze ./example/SunPoem.enc
Message Encryption/Decryption with Autokey variant using -a flag
arcipher vigenere encrypt "Secret" "helloworld" -a
arcipher vigenere decrypt "Secret" "zincspvvwo" -a
File Encryption/Decryption with Autokey variant using 4 threads
arcipher vigenere encrypt "Keyword" ./example/SunPoem ./example/SunPoem.enc --block 512 --threads 4 -a
arcipher vigenere decrypt "Keyword" ./example/SunPoem.enc ./example/SunPoem --block 512 --threads 4 -a
Affine
Generate an Affine cipher key
arcipher affine generate-key 3 key.json
arcipher affine generate-key 25 key.json --template
Message Encryption/Decryption with key
arcipher affine encrypt ./key.json "HELLOWORLD"
arcipher affine decrypt ./key.json "ZICVTWQNGRZGVTWAVZHCQYGLMGJ"
File Encryption/Decryption with key and 4 threads
arcipher affine encrypt key.json ./example/input ./example/input.enc --threads 4 -v
arcipher affine decrypt key.json ./example/input.enc ./example/output --threads 4 -v

Options

  • -v, --verbose — Show performance metrics
  • -b, --block — Block size in KB for file processing (default: 64)
  • -t, --threads — Worker threads for file processing (default: CPU cores / 2)

Testing

go test ./tests/...

or

make test

License

MIT License — see LICENSE

Directories

Path Synopsis
Package ciphers provides implementations of various classical and modern encryption ciphers.
Package ciphers provides implementations of various classical and modern encryption ciphers.
analyze
Package analyze provides functionality for cryptanalysis of classical ciphers.
Package analyze provides functionality for cryptanalysis of classical ciphers.
mathutils
mathutils provides functions and structs to perform mathematical operations.
mathutils provides functions and structs to perform mathematical operations.
cmd
arcipher command
internal
cmd

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL