Algorithms_in_C++  1.0.0
Set of algorithms implemented in C++.
caesar_cipher.cpp File Reference

Implementation of Caesar cipher algorithm. More...

#include <iostream>
#include <string>
#include <cassert>
Include dependency graph for caesar_cipher.cpp:

Namespaces

 ciphers
 Algorithms for encryption and decryption.
 
 caesar
 Functions for Caesar cipher algorithm.
 

Functions

std::string ciphers::caesar::encrypt (const std::string &text, const int &shift)
 
std::string ciphers::caesar::decrypt (const std::string &text, const int &shift)
 
void test ()
 
int main ()
 

Detailed Description

Implementation of Caesar cipher algorithm.

In cryptography, a Caesar cipher, also known as Caesar's cipher, the shift cipher, Caesar's code or Caesar shift, is one of the simplest and most widely known encryption techniques. It is a type of substitution cipher in which each letter in the plaintext is replaced by a letter some fixed number of positions down the alphabet. For example, with a left shift of 3, D would be replaced by A, E would become B, and so on. The method is named after Julius Caesar, who used it in his private correspondence.

Algorithm

The encryption can also be represented using modular arithmetic by first transforming the letters into numbers, according to the scheme, A → 0, B → 1, ..., Z → 25. Encryption of a letter x by a shift n can be described mathematically as,

\[ E(x) = (x + n)\;\mbox{mod}\; 26\]

while decryption can be described as,

\[ D(x) = (x - n) \;\mbox{mod}\; 26\]

Note
This program implements caesar cipher for only uppercase English alphabet characters (i.e. A-Z).
Author
Deep Raval

Function Documentation

◆ decrypt()

std::string ciphers::caesar::decrypt ( const std::string text,
const int &  shift 
)

Decrypt given text using caesar cipher.

Parameters
texttext to be decrypted
shiftnumber of shifts to be applied
Returns
new decrypted text
81  {
82  std::string decrypted_text = ""; // Empty string to store decrypted text
83  for (char c : text) { // Going through each character
84  int place_value = get_value(c); // Getting value of character (i.e. 0-25)
85  place_value = (place_value - shift) % 26;// Applying decryption formula
86  if(place_value < 0) { // Handling case where remainder is negative
87  place_value = place_value + 26;
88  }
89  char new_char = get_char(place_value); // Getting original character from decrypted value (i.e. A-Z)
90  decrypted_text += new_char; // Appending decrypted character
91  }
92  return decrypted_text; // Returning decrypted text
93  }
Here is the call graph for this function:

◆ encrypt()

std::string ciphers::caesar::encrypt ( const std::string text,
const int &  shift 
)

Encrypt given text using caesar cipher.

Parameters
texttext to be encrypted
shiftnumber of shifts to be applied
Returns
new encrypted text
65  {
66  std::string encrypted_text = ""; // Empty string to store encrypted text
67  for (char c : text) { // Going through each character
68  int place_value = get_value(c); // Getting value of character (i.e. 0-25)
69  place_value = (place_value + shift) % 26; // Applying encryption formula
70  char new_char = get_char(place_value); // Getting new character from new value (i.e. A-Z)
71  encrypted_text += new_char; // Appending encrypted character
72  }
73  return encrypted_text; // Returning encrypted text
74  }
Here is the call graph for this function:

◆ main()

int main ( )

Driver Code

120  {
121  // Testing
122  test();
123  return 0;
124 }
Here is the call graph for this function:

◆ test()

void test ( )

Function to test above algorithm

100  {
101  // Test 1
102  std::string text1 = "ALANTURING";
103  std::string encrypted1 = ciphers::caesar::encrypt(text1, 17);
104  std::string decrypted1 = ciphers::caesar::decrypt(encrypted1, 17);
105  assert(text1 == decrypted1);
106  std::cout << "Original text : " << text1;
107  std::cout << " , Encrypted text (with shift = 21) : " << encrypted1;
108  std::cout << " , Decrypted text : "<< decrypted1 << std::endl;
109  // Test 2
110  std::string text2 = "HELLOWORLD";
111  std::string encrypted2 = ciphers::caesar::encrypt(text2, 1729);
112  std::string decrypted2 = ciphers::caesar::decrypt(encrypted2, 1729);
113  assert(text2 == decrypted2);
114  std::cout << "Original text : " << text2;
115  std::cout << " , Encrypted text (with shift = 1729) : " << encrypted2;
116  std::cout << " , Decrypted text : "<< decrypted2 << std::endl;
117 }
Here is the call graph for this function:
mov
void mov(tower *From, tower *To)
Definition: tower_of_hanoi.cpp:39
main
int main()
Definition: caesar_cipher.cpp:120
std::srand
T srand(T... args)
main
int main()
Definition: knuth_morris_pratt.cpp:76
main
int main()
Definition: fenwick_tree.cpp:69
ternary_search
void ternary_search(int N, int A[], int target)
Definition: ternary_search.cpp:127
std::floor
T floor(T... args)
ciphers::caesar::encrypt
std::string encrypt(const std::string &text, const int &shift)
Definition: caesar_cipher.cpp:65
test3
void test3()
Definition: smallest_circle.cpp:188
main
int main(void)
Definition: decimal_to_hexadecimal.cpp:11
method2
void method2(int number)
Definition: decimal_to_binary.cpp:27
main
int main()
Definition: exponential_search.cpp:74
mat_size
ll mat_size
Definition: matrix_exponentiation.cpp:45
main
int main()
Definition: stairs_pattern.cpp:17
hash_search
int hash_search(int key, int *counter)
Definition: hash_search.cpp:76
std::string
STL class.
sorting::shell_sort
void shell_sort(T *arr, size_t LEN)
Definition: shell_sort2.cpp:45
main
int main()
Definition: fibonacci_search.cpp:123
tolowerRoman
std::string tolowerRoman(int n)
Definition: decimal_to_roman_numeral.cpp:24
test_f
void test_f(const int NUM_DATA)
Definition: shell_sort2.cpp:145
string_search
String search algorithms.
Definition: brute_force_string_searching.cpp:13
MAX
#define MAX
Definition: fibonacci_fast.cpp:27
show_data
void show_data(T *arr, size_t LEN)
Definition: shell_sort2.cpp:18
std::list
STL class.
heapSort
void heapSort(T *arr, int n)
Definition: heap_sort.cpp:84
std::clock_t
std::move
T move(T... args)
main
int main()
Definition: binomial_dist.cpp:84
addition_rule_dependent
double addition_rule_dependent(double A, double B, double B_given_A)
Definition: addition_rule.cpp:25
test2
void test2()
Definition: smallest_circle.cpp:173
std::pair
random_tests
bool random_tests()
random tests which cover cases when we have one, multiple or zero occurences of the value we're looki...
Definition: fibonacci_search.cpp:96
std::vector
STL class.
std::find
T find(T... args)
std::vector::size
T size(T... args)
Point::x
double x
Definition: smallest_circle.cpp:16
main
int main()
Definition: decimal_to_roman_numeral.cpp:90
FenwickTree::sum_range
int sum_range(int l, int r)
Definition: fenwick_tree.cpp:65
test
void test()
Definition: heap_sort.cpp:99
absolutePrecision
#define absolutePrecision
Definition: ternary_search.cpp:22
ans
ll ans(ll n)
Definition: matrix_exponentiation.cpp:91
FenwickTree
Definition: fenwick_tree.cpp:17
main
int main()
Definition: gnome_sort.cpp:130
sorting::insertionSort
void insertionSort(T *arr, int n)
Insertion Sort Function.
Definition: insertion_sort.cpp:59
HASHMAX
#define HASHMAX
Determines the length of the hash table.
Definition: hash_search.cpp:22
PRIME
#define PRIME
Prime modulus for hash functions.
Definition: rabin_karp.cpp:16
sorting::partition
int partition(int arr[], int low, int high)
Definition: quick_sort.cpp:37
std::distance
T distance(T... args)
binary_s
Type * binary_s(Type *array, size_t size, Type key)
Definition: exponential_search.cpp:34
node
Definition: avltree.cpp:13
Point::y
double y
Definition: smallest_circle.cpp:17
std::search
T search(T... args)
node
struct list node
FindNextGap
int FindNextGap(int gap)
Definition: comb_sort.cpp:29
MAX
#define MAX
Determines how much data.
Definition: hash_search.cpp:21
main
int main()
Definition: pascal_triangle.cpp:52
main
int main()
Definition: bayes_theorem.cpp:26
std::scanf
T scanf(T... args)
multiply
vector< vector< ll > > multiply(const vector< vector< ll >> &A, const vector< vector< ll >> &B)
Definition: matrix_exponentiation.cpp:57
test_double
static void test_double()
Definition: quick_sort_3.cpp:160
std::reverse
T reverse(T... args)
test
static void test()
Definition: gnome_sort.cpp:85
main
int main(void)
Definition: qr_decomposition.cpp:23
main
int main()
Definition: palindrome_of_number.cpp:19
sorting
Sorting algorithms.
main
int main()
Definition: vector_important_functions.cpp:11
std::queue
STL class.
sorting::merge
void merge(Iterator, Iterator, const Iterator, char[])
merges 2 sorted adjacent segments into a larger sorted segment
Definition: non_recursive_merge_sort.cpp:57
sorting::shuffle
std::array< T, N > shuffle(std::array< T, N > arr)
Definition: bogo_sort.cpp:36
main
int main()
Definition: linear_search.cpp:27
eqd
static float eqd(float y)
Definition: successive_approximation.cpp:17
show_array
void show_array(const std::array< T, N > &arr)
Definition: bogo_sort.cpp:68
std::sort
T sort(T... args)
fill
std::string fill(char c, int n)
Definition: decimal_to_roman_numeral.cpp:15
mat_mul
void mat_mul(const std::valarray< std::valarray< double >> &A, const std::valarray< std::valarray< double >> &B, std::valarray< std::valarray< double >> *OUT)
Definition: qr_eigen_values.cpp:54
string_search::create_hash
int64_t create_hash(const std::string &s, int n)
Definition: rabin_karp.cpp:25
std::sqrt
T sqrt(T... args)
stack_idx
int stack_idx
pointer to track stack index
Definition: paranthesis_matching.cpp:23
main
int main(int argc, char *argv[])
Definition: shell_sort2.cpp:183
main
int main()
Definition: interpolation_search2.cpp:32
compare
int compare(const void *a, const void *b)
Definition: shell_sort2.cpp:87
string_search::brute_force
int brute_force(const std::string &text, const std::string &pattern)
Definition: brute_force_string_searching.cpp:21
main
int main()
Definition: buzz_number.cpp:9
std::is_sorted
T is_sorted(T... args)
fibonacci_search
int fibonacci_search(const std::vector< int > &arr, int value)
using fibonacci search algorithm finds an index of a given element in a sorted array
Definition: fibonacci_search.cpp:23
qr_algorithm
Functions to compute QR decomposition of any rectangular matrix.
FenwickTree::offset
int offset(int x)
Definition: fenwick_tree.cpp:22
create_matrix
void create_matrix(std::valarray< std::valarray< double >> *A)
Definition: qr_eigen_values.cpp:28
main
int main()
Definition: happy_number.cpp:29
query
Definition: mo.cpp:6
main
int main()
Definition: text_search.cpp:15
show
void show(int *arr, int size)
Definition: merge_sort.cpp:96
test_set
const std::vector< std::vector< std::string > > test_set
Definition: brute_force_string_searching.cpp:41
rec_ternary_search
int rec_ternary_search(int left, int right, int A[], int target)
Definition: ternary_search.cpp:90
Node
Definition: linkedlist_implentation_usingarray.cpp:14
std::vector::push_back
T push_back(T... args)
Point::y
int y
Point respect to x coordinate.
Definition: line_segment_intersection.cpp:14
qr_algorithm::eigen_values
std::valarray< double > eigen_values(std::valarray< std::valarray< double >> *A, bool print_intermediates=false)
Definition: qr_eigen_values.cpp:98
std::clock
T clock(T... args)
string_search::recalculate_hash
int64_t recalculate_hash(const std::string &s, int old_index, int new_index, int64_t old_hash, int patLength)
Definition: rabin_karp.cpp:42
main
int main()
Definition: smallest_circle.cpp:198
test_int
void test_int(const int NUM_DATA)
Definition: shell_sort2.cpp:105
pascal_triangle
int ** pascal_triangle(int **arr, int n)
Definition: pascal_triangle.cpp:36
CombSort
void CombSort(int *arr, int l, int r)
Definition: comb_sort.cpp:42
sorting::quicksort
void quicksort(std::vector< T > *arr, int32_t low, int32_t high)
Definition: quick_sort_3.cpp:94
insert
node * insert(node *root, int item)
Definition: avltree.cpp:66
std::printf
T printf(T... args)
FenwickTree::FenwickTree
FenwickTree(const std::vector< int > &arr)
Definition: fenwick_tree.cpp:28
mergeSort
void mergeSort(int *arr, int l, int r)
Definition: merge_sort.cpp:83
main
int main()
Definition: matrix_exponentiation.cpp:126
main
int main()
Definition: fast_interger_input.cpp:39
std::cout
qr_decompose.h
Library functions to compute QR decomposition of a given matrix.
merge
void merge(int *arr, int l, int m, int r)
Definition: merge_sort.cpp:33
create_random_array
static void create_random_array(T *arr, int N)
Create a random array objecthelper function to create a random array.
Definition: insertion_sort.cpp:101
h
int h(int key)
Definition: hash_search.cpp:45
sorting::non_recursive_merge_sort
void non_recursive_merge_sort(const Iterator first, const Iterator last)
bottom-up merge sort which sorts elements in a non-decreasing order
Definition: non_recursive_merge_sort.cpp:86
FenwickTree::update
void update(int id, int val)
Definition: fenwick_tree.cpp:45
main
int main(int argc, char const *argv[])
Definition: binary_search.cpp:31
tower
Definition: tower_of_hanoi.cpp:11
_target
#define _target
Definition: ternary_search.cpp:27
test
void test()
Definition: bogo_sort.cpp:78
binary_search
int binary_search(int a[], int r, int key)
Definition: binary_search.cpp:15
opening
char opening(char ch)
Definition: paranthesis_matching.cpp:36
is_happy
bool is_happy(T n)
Definition: happy_number.cpp:14
string_search::check_if_equal
bool check_if_equal(const std::string &str1, const std::string &str2, int start1, int end1, int start2, int end2)
Definition: rabin_karp.cpp:60
main
int main()
Definition: median_search.cpp:38
main
int main()
Definition: ternary_search.cpp:134
binomial_range_successes
double binomial_range_successes(double n, double p, double lower_bound, double upper_bound)
Definition: binomial_dist.cpp:74
LenghtLine
double LenghtLine(const Point &A, const Point &B)
Definition: smallest_circle.cpp:37
std::qsort
T qsort(T... args)
std::to_string
T to_string(T... args)
std::array
STL class.
string_search::kmp
bool kmp(const std::string &pattern, const std::string &text)
Definition: knuth_morris_pratt.cpp:56
poisson_range_successes
double poisson_range_successes(double expected, double lower, double upper)
Definition: poisson_dist.cpp:54
main
int main()
Definition: tower_of_hanoi.cpp:65
sorting::non_recursive_merge_sort
void non_recursive_merge_sort(const Iterator first, const Iterator last, const size_t n)
bottom-up merge sort which sorts elements in a non-decreasing order
Definition: non_recursive_merge_sort.cpp:25
ll
#define ll
Definition: matrix_exponentiation.cpp:33
std::string::erase
T erase(T... args)
std::valarray
STL class.
binomial_standard_deviation
double binomial_standard_deviation(double n, double p)
Definition: binomial_dist.cpp:36
sorting::gnomeSort
void gnomeSort(T *arr, int size)
Definition: gnome_sort.cpp:34
TriangleArea
double TriangleArea(const Point &A, const Point &B, const Point &C)
Definition: smallest_circle.cpp:54
main
int main()
Definition: brute_force_string_searching.cpp:47
binomial_x_successes
double binomial_x_successes(double n, double p, double x)
Definition: binomial_dist.cpp:65
test2
void test2()
Definition: qr_eigen_values.cpp:210
std::remove
T remove(T... args)
endl
#define endl
Definition: matrix_exponentiation.cpp:36
link
struct list * link
pointer to nodes
comp
void comp(X x, std::vector< int > *s1, std::vector< int > *s2, std::vector< int > *s3)
Definition: median_search.cpp:17
spiralPrint
void spiralPrint(int **a, int r, int c)
Definition: spiral_print.cpp:29
bayes_BgivenA
double bayes_BgivenA(double AgivenB, double A, double B)
Definition: bayes_theorem.cpp:20
main
int main()
Definition: quick_sort_3.cpp:183
fib_b
vector< ll > fib_b
Definition: matrix_exponentiation.cpp:50
poisson_rate
double poisson_rate(double events, double timeframe)
Definition: poisson_dist.cpp:17
list::key
int key
key value for node
Definition: hash_search.cpp:30
main
int main(int argc, char **argv)
Definition: qr_eigen_values.cpp:243
std::ceil
T ceil(T... args)
circle
double circle(const std::vector< Point > &P)
Definition: smallest_circle.cpp:87
print
void print(uint32_t N, const std::vector< bool > &is_prime)
Definition: sieve_of_eratosthenes.cpp:44
eq
static float eq(float y)
Definition: successive_approximation.cpp:12
test_int
static void test_int()
Definition: quick_sort_3.cpp:138
struzik_search
Type * struzik_search(Type *array, size_t size, Type key)
Definition: exponential_search.cpp:59
main
int main()
Definition: poisson_dist.cpp:65
std::rand
T rand(T... args)
std::swap
T swap(T... args)
std::min
T min(T... args)
binomial_expected
double binomial_expected(double n, double p)
Definition: binomial_dist.cpp:22
main
int main()
Definition: heap_sort.cpp:120
hashtab
node hashtab[HASHMAX]
array of nodes
Definition: hash_search.cpp:35
std::string::substr
T substr(T... args)
it_ternary_search
int it_ternary_search(int left, int right, int A[], int target)
Definition: ternary_search.cpp:48
jumpSearch
int jumpSearch(int arr[], int x, int n)
Definition: jump_search.cpp:12
ciphers::caesar::decrypt
std::string decrypt(const std::string &text, const int &shift)
Definition: caesar_cipher.cpp:81
data
int data[MAX]
test data
Definition: hash_search.cpp:24
method1
void method1(int number)
Definition: decimal_to_binary.cpp:11
test1
void test1()
Definition: qr_eigen_values.cpp:177
no_occurence_tests
bool no_occurence_tests()
random tests for checking performance when an array doesn't contain an element
Definition: fibonacci_search.cpp:72
printArray
void printArray(T *arr, int sz)
Definition: heap_sort.cpp:37
std::lower_bound
T lower_bound(T... args)
main
int main()
Definition: hash_search.cpp:99
std::endl
T endl(T... args)
std::left
T left(T... args)
create_list
void create_list(int key)
Definition: hash_search.cpp:55
fact
double fact(double x)
Definition: poisson_dist.cpp:30
std::exp
T exp(T... args)
std::string::begin
T begin(T... args)
std::getline
T getline(T... args)
std
STL namespace.
addition_rule_independent
double addition_rule_independent(double A, double B)
Definition: addition_rule.cpp:14
sorting::randomized_bogosort
std::array< T, N > randomized_bogosort(std::array< T, N > arr)
Definition: bogo_sort.cpp:51
show
void show(const struct tower *const F, const struct tower *const T, const struct tower *const U)
Definition: tower_of_hanoi.cpp:19
main
int main()
Definition: sparse_matrix.cpp:9
test
void test()
Definition: smallest_circle.cpp:158
compare
Definition: huffman.cpp:28
main
int main()
Definition: spiral_print.cpp:69
MAX
#define MAX
Definition: paranthesis_matching.cpp:16
stack
Definition: stack.h:26
power
vector< vector< ll > > power(const vector< vector< ll >> &A, ll p)
Definition: matrix_exponentiation.cpp:76
main
int main()
Definition: successive_approximation.cpp:20
std::count
T count(T... args)
tests
void tests()
Definition: insertion_sort.cpp:109
LinearSearch
int LinearSearch(int *array, int size, int key)
Definition: linear_search.cpp:16
std::vector::assign
T assign(T... args)
IsPrime
bool IsPrime(int number)
Definition: primality_test.cpp:18
nCr
double nCr(double n, double r)
Definition: binomial_dist.cpp:47
tower::values
int values[10]
Values in the tower.
Definition: tower_of_hanoi.cpp:13
qr_algorithm::qr_decompose
void qr_decompose(const std::valarray< std::valarray< T >> &A, std::valarray< std::valarray< T >> *Q, std::valarray< std::valarray< T >> *R)
Definition: qr_decompose.h:146
main
int main()
Definition: insertion_sort.cpp:150
genArray
void genArray(int **a, int r, int c)
Definition: spiral_print.cpp:12
main
int main()
Definition: comb_sort.cpp:88
operator<<
static std::ostream & operator<<(std::ostream &out, matrix< T > const &v)
Definition: hill_cipher.cpp:54
main
int main()
Definition: interpolation_search.cpp:37
add
std::string add(std::string a, std::string b)
Definition: string_fibonacci.cpp:24
std::time
T time(T... args)
main
int main()
Definition: addition_rule.cpp:30
toupperRoman
std::string toupperRoman(int n)
Definition: decimal_to_roman_numeral.cpp:58
LIMS
#define LIMS
Definition: qr_eigen_values.cpp:20
std::string::end
T end(T... args)
bayes_AgivenB
double bayes_AgivenB(double BgivenA, double A, double B)
Definition: bayes_theorem.cpp:14
FenwickTree::sum
int sum(int id)
Definition: fenwick_tree.cpp:54
std::setw
T setw(T... args)
main
int main()
Definition: quick_sort.cpp:82
std::max
T max(T... args)
FenwickTree::FenwickTree
FenwickTree(int x)
Definition: fenwick_tree.cpp:39
Point::Point
Point(double a=0.f, double b=0.f)
Definition: smallest_circle.cpp:23
main
int main()
Definition: primality_test.cpp:31
list::next
struct list * next
pointer to next link in the chain
Definition: hash_search.cpp:31
tower::top
int top
top tower ID
Definition: tower_of_hanoi.cpp:15
Point
Definition: line_segment_intersection.cpp:12
TH
void TH(int n, tower *From, tower *Using, tower *To)
Definition: tower_of_hanoi.cpp:52
interpolation_search
int interpolation_search(int arr[], int value, int len)
Definition: interpolation_search.cpp:15
push
void push(char ch)
push byte to stack variable
Definition: paranthesis_matching.cpp:26
main
int main()
Definition: bogo_sort.cpp:104
main
int main()
Definition: merge_sort.cpp:102
pop
char pop()
pop a byte out of stack variable
Definition: paranthesis_matching.cpp:29
InterpolationSearch
int InterpolationSearch(int A[], int n, int x)
Definition: interpolation_search2.cpp:15
std::cin
poisson_expected
double poisson_expected(double rate, double time)
Definition: poisson_dist.cpp:25
poisson_x_successes
double poisson_x_successes(double expected, double x)
Definition: poisson_dist.cpp:46
main
int main(void)
Definition: rabin_karp.cpp:105
std::random_shuffle
T random_shuffle(T... args)
sorting::quickSort
void quickSort(int arr[], int low, int high)
Definition: quick_sort.cpp:63
std::numeric_limits
string_search::getFailureArray
std::vector< int > getFailureArray(const std::string &pattern)
Definition: knuth_morris_pratt.cpp:33
show_pascal
void show_pascal(int **arr, int n)
Definition: pascal_triangle.cpp:18
string_search::rabin_karp
int rabin_karp(const std::string &str, const std::string &pat)
Definition: rabin_karp.cpp:83
test
void test()
Definition: caesar_cipher.cpp:100
get_input
void get_input()
Definition: ternary_search.cpp:36
PointInCircle
bool PointInCircle(const std::vector< Point > &P, const Point &Center, double R)
Definition: smallest_circle.cpp:72
std::getchar
T getchar(T... args)
tests
void tests()
Definition: comb_sort.cpp:73
list
Definition: list_array.cpp:8
std::memset
T memset(T... args)
binomial_variance
double binomial_variance(double n, double p)
Definition: binomial_dist.cpp:29
std::next
T next(T... args)
sorting::shell_sort
void shell_sort(std::vector< T > *arr)
Definition: shell_sort2.cpp:75
fastinput
void fastinput(int *number)
Definition: fast_interger_input.cpp:11
std::pow
T pow(T... args)