# Encryption and Decryption of String according to given technique

Given a string S, the task is to encrypt the string and decrypt the string again to the original form.
Encryption Technique: If L is the length of the string, then take two values, one the ceil of √L (say b), and the other floor of √L (say a), and make a two-dimensional matrix having rows = a, and columns = b.
If rows*columns < L, then increase the value of a or b, whichever is minimum. Fill the matrix with the characters of the original string sequentially. After obtaining the matrix, read the matrix column-wise and print the obtained string. Decryption Technique: If L is the length of the encrypted string, then again find the two values a and b, where a is the ceil value of the √L and b is the floor value of the √L. Similarly create a 2D Matrix in which store the string column wise and read the matrix row-wise to get the string in the original form. ## Recommended: Please try your approach on {IDE} first, before moving on to the solution.

Encryption Approach:

• Find the length L of the string.
• Find the ceil and floor values of √Length and assign them to the variables.
• Check if the product of the two variables >= Length, if not then increment the variable having lesser value by 1.
• Create a 2D matrix and fill the characters of the string row-wise.
• Read the matrix column-wise to get the encrypted string.

Decryption Approach:

• Find the length L of the string.
• Find the ceil and floor values of √Length and assign them to the variables.
• Create a 2D matrix and fill the matrix by characters of string column-wise.
• Read the matrix row-wise to get the decrypted string.

Below is the implementation of the above approach:

## C++

 `// C++ implementation for Custom ` `// Encryption and Decryption of String ` ` `  `#include ` `using` `namespace` `std; ` ` `  `// Function to encrypt the string ` `string encryption(string s) ` `{ ` `    ``int` `l = s.length(); ` `    ``int` `b = ``ceil``(``sqrt``(l)); ` `    ``int` `a = ``floor``(``sqrt``(l)); ` `    ``string encrypted; ` `    ``if` `(b * a < l) { ` `        ``if` `(min(b, a) == b) { ` `            ``b = b + 1; ` `        ``} ` `        ``else` `{ ` `            ``a = a + 1; ` `        ``} ` `    ``} ` ` `  `    ``// Matrix to generate the  ` `    ``// Encrypted String ` `    ``char` `arr[a][b]; ` `    ``memset``(arr, ``' '``, ``sizeof``(arr)); ` `    ``int` `k = 0; ` `     `  `    ``// Fill the matrix row-wise ` `    ``for` `(``int` `j = 0; j < a; j++) { ` `        ``for` `(``int` `i = 0; i < b; i++) { ` `            ``if` `(k < l){ ` `                ``arr[j][i] = s[k]; ` `            ``} ` `            ``k++; ` `        ``} ` `    ``} ` ` `  `    ``// Loop to generate  ` `    ``// encrypted string ` `    ``for` `(``int` `j = 0; j < b; j++) { ` `        ``for` `(``int` `i = 0; i < a; i++) { ` `            ``encrypted = encrypted +  ` `                         ``arr[i][j]; ` `        ``} ` `    ``} ` `    ``return` `encrypted; ` `} ` ` `  `// Function to decrypt the string ` `string decryption(string s){ ` `    ``int` `l = s.length(); ` `    ``int` `b = ``ceil``(``sqrt``(l)); ` `    ``int` `a = ``floor``(``sqrt``(l)); ` `    ``string decrypted; ` ` `  `    ``// Matrix to generate the  ` `    ``// Encrypted String ` `    ``char` `arr[a][b]; ` `    ``memset``(arr, ``' '``, ``sizeof``(arr)); ` `    ``int` `k = 0; ` `     `  `    ``// Fill the matrix column-wise ` `    ``for` `(``int` `j = 0; j < b; j++) { ` `        ``for` `(``int` `i = 0; i < a; i++) { ` `            ``if` `(k < l){ ` `                ``arr[j][i] = s[k]; ` `            ``} ` `            ``k++; ` `        ``} ` `    ``} ` ` `  `    ``// Loop to generate  ` `    ``// decrypted string ` `    ``for` `(``int` `j = 0; j < a; j++) { ` `        ``for` `(``int` `i = 0; i < b; i++) { ` `            ``decrypted = decrypted +  ` `                         ``arr[i][j]; ` `        ``} ` `    ``} ` `    ``return` `decrypted; ` `} ` ` `  `// Driver Code ` `int` `main() ` `{ ` `    ``string s = ``"Geeks For Geeks"``; ` `    ``string encrypted; ` `    ``string decrypted; ` `     `  `    ``// Encryption of String ` `    ``encrypted = encryption(s); ` `    ``cout << encrypted << endl; ` `     `  `    ``// Decryption of String ` `    ``decrypted = decryption(encrypted); ` `    ``cout << decrypted; ` `    ``return` `0; ` `} `

## Java

 `// Java implementation for Custom ` `// Encryption and Decryption of String ` `class` `GFG ` `{ ` ` `  `// Function to encrypt the String ` `static` `String encryption(``char``[] s) ` `{ ` `    ``int` `l = s.length; ` `    ``int` `b = (``int``) Math.ceil(Math.sqrt(l)); ` `    ``int` `a = (``int``) Math.floor(Math.sqrt(l)); ` `    ``String encrypted = ``""``; ` `    ``if` `(b * a < l) ` `    ``{ ` `        ``if` `(Math.min(b, a) == b)  ` `        ``{ ` `            ``b = b + ``1``; ` `        ``} ` `        ``else` `        ``{ ` `            ``a = a + ``1``; ` `        ``} ` `    ``} ` ` `  `    ``// Matrix to generate the  ` `    ``// Encrypted String ` `    ``char` `[][]arr = ``new` `char``[a][b]; ` `    ``int` `k = ``0``; ` `     `  `    ``// Fill the matrix row-wise ` `    ``for` `(``int` `j = ``0``; j < a; j++)  ` `    ``{ ` `        ``for` `(``int` `i = ``0``; i < b; i++)  ` `        ``{ ` `            ``if` `(k < l) ` `            ``{ ` `                ``arr[j][i] = s[k]; ` `            ``} ` `            ``k++; ` `        ``} ` `    ``} ` ` `  `    ``// Loop to generate  ` `    ``// encrypted String ` `    ``for` `(``int` `j = ``0``; j < b; j++)  ` `    ``{ ` `        ``for` `(``int` `i = ``0``; i < a; i++)  ` `        ``{ ` `            ``encrypted = encrypted +  ` `                        ``arr[i][j]; ` `        ``} ` `    ``} ` `    ``return` `encrypted; ` `} ` ` `  `// Function to decrypt the String ` `static` `String decryption(``char` `[]s) ` `{ ` `    ``int` `l = s.length; ` `    ``int` `b = (``int``) Math.ceil(Math.sqrt(l)); ` `    ``int` `a = (``int``) Math.floor(Math.sqrt(l)); ` `    ``String decrypted=``""``; ` ` `  `    ``// Matrix to generate the  ` `    ``// Encrypted String ` `    ``char` `[][]arr = ``new` `char``[a][b]; ` `    ``int` `k = ``0``; ` `     `  `    ``// Fill the matrix column-wise ` `    ``for` `(``int` `j = ``0``; j < b; j++)  ` `    ``{ ` `        ``for` `(``int` `i = ``0``; i < a; i++)  ` `        ``{ ` `            ``if` `(k < l) ` `            ``{ ` `                ``arr[j][i] = s[k]; ` `            ``} ` `            ``k++; ` `        ``} ` `    ``} ` ` `  `    ``// Loop to generate  ` `    ``// decrypted String ` `    ``for` `(``int` `j = ``0``; j < a; j++)  ` `    ``{ ` `        ``for` `(``int` `i = ``0``; i < b; i++)  ` `        ``{ ` `            ``decrypted = decrypted +  ` `                        ``arr[i][j]; ` `        ``} ` `    ``} ` `    ``return` `decrypted; ` `} ` ` `  `// Driver Code ` `public` `static` `void` `main(String[] args) ` `{ ` `    ``String s = ``"Geeks For Geeks"``; ` `    ``String encrypted; ` `    ``String decrypted; ` `     `  `    ``// Encryption of String ` `    ``encrypted = encryption(s.toCharArray()); ` `    ``System.out.print(encrypted +``"\n"``); ` `     `  `    ``// Decryption of String ` `    ``decrypted = decryption(encrypted.toCharArray()); ` `    ``System.out.print(decrypted); ` `} ` `} ` ` `  `// This code is contributed by PrinciRaj1992 `

## Python3

 `# Python3 implementation for Custom ` `# Encryption and Decryption of String ` `from` `math ``import` `ceil,floor,sqrt ` ` `  `# Function to encrypt the ` `def` `encryption(s): ` `    ``l ``=` `len``(s) ` `    ``b ``=` `ceil(sqrt(l)) ` `    ``a ``=` `floor(sqrt(l)) ` `    ``encrypted``=``"" ` `    ``if` `(b ``*` `a < l): ` `        ``if` `(``min``(b, a) ``=``=` `b): ` `            ``b ``=` `b ``+` `1` `        ``else``: ` `            ``a ``=` `a ``+` `1` ` `  `    ``# Matrix to generate the ` `    ``# Encrypted String ` `    ``arr ``=` `[[``' '` `for` `i ``in` `range``(a)] ``for` `j ``in` `range``(b)] ` `    ``k ``=` `0` ` `  `    ``# Fill the matrix row-wise ` `    ``for` `j ``in` `range``(a): ` `        ``for` `i ``in` `range``(b): ` `            ``if` `(k < l): ` `                ``arr[j][i] ``=` `s[k] ` `            ``k ``+``=` `1` ` `  `    ``# Loop to generate ` `    ``# encrypted ` `    ``for` `j ``in` `range``(b): ` `        ``for` `i ``in` `range``(a): ` `            ``encrypted ``=` `encrypted ``+` `arr[i][j] ` ` `  `    ``return` `encrypted ` ` `  `# Function to decrypt the ` `def` `decryption(s): ` `    ``l ``=` `len``(s) ` `    ``b ``=` `ceil(sqrt(l)) ` `    ``a ``=` `floor(sqrt(l)) ` `    ``decrypted``=``"" ` ` `  `    ``# Matrix to generate the ` `    ``# Encrypted String ` `    ``arr ``=` `[[``' '` `for` `i ``in` `range``(a)] ``for` `j ``in` `range``(b)] ` `    ``k ``=` `0` ` `  `    ``# Fill the matrix column-wise ` `    ``for` `j ``in` `range``(b): ` `        ``for` `i ``in` `range``(a): ` `            ``if` `(k < l): ` `                ``arr[j][i] ``=` `s[k] ` `            ``k ``+``=` `1` ` `  `    ``# Loop to generate ` `    ``# decrypted ` `    ``for` `j ``in` `range``(a): ` `        ``for` `i ``in` `range``(b): ` `            ``decrypted ``=` `decrypted ``+` `arr[i][j] ` `    ``return` `decrypted ` ` `  `# Driver Code ` ` `  `s ``=` `"Geeks For Geeks"` `encrypted``=``"" ` `decrypted``=``"" ` ` `  `# Encryption of String ` `encrypted ``=` `encryption(s) ` `print``(encrypted) ` ` `  `# Decryption of String ` `decrypted ``=` `decryption(encrypted) ` `print``(decrypted) ` ` `  `# This code is contributed by mohit kumar 29 `

## C#

 `// C# implementation for Custom ` `// Encryption and Decryption of String ` `using` `System; ` ` `  `class` `GFG ` `{ ` `  `  `// Function to encrypt the String ` `static` `String encryption(``char``[] s) ` `{ ` `    ``int` `l = s.Length; ` `    ``int` `b = (``int``) Math.Ceiling(Math.Sqrt(l)); ` `    ``int` `a = (``int``) Math.Floor(Math.Sqrt(l)); ` `    ``String encrypted = ``""``; ` `    ``if` `(b * a < l) ` `    ``{ ` `        ``if` `(Math.Min(b, a) == b)  ` `        ``{ ` `            ``b = b + 1; ` `        ``} ` `        ``else` `        ``{ ` `            ``a = a + 1; ` `        ``} ` `    ``} ` `  `  `    ``// Matrix to generate the  ` `    ``// Encrypted String ` `    ``char` `[,]arr = ``new` `char``[a, b]; ` `    ``int` `k = 0; ` `      `  `    ``// Fill the matrix row-wise ` `    ``for` `(``int` `j = 0; j < a; j++)  ` `    ``{ ` `        ``for` `(``int` `i = 0; i < b; i++)  ` `        ``{ ` `            ``if` `(k < l) ` `            ``{ ` `                ``arr[j, i] = s[k]; ` `            ``} ` `            ``k++; ` `        ``} ` `    ``} ` `  `  `    ``// Loop to generate  ` `    ``// encrypted String ` `    ``for` `(``int` `j = 0; j < b; j++)  ` `    ``{ ` `        ``for` `(``int` `i = 0; i < a; i++)  ` `        ``{ ` `            ``encrypted = encrypted +  ` `                        ``arr[i, j]; ` `        ``} ` `    ``} ` `    ``return` `encrypted; ` `} ` `  `  `// Function to decrypt the String ` `static` `String decryption(``char` `[]s) ` `{ ` `    ``int` `l = s.Length; ` `    ``int` `b = (``int``) Math.Ceiling(Math.Sqrt(l)); ` `    ``int` `a = (``int``) Math.Floor(Math.Sqrt(l)); ` `    ``String decrypted=``""``; ` `  `  `    ``// Matrix to generate the  ` `    ``// Encrypted String ` `    ``char` `[,]arr = ``new` `char``[a, b]; ` `    ``int` `k = 0; ` `      `  `    ``// Fill the matrix column-wise ` `    ``for` `(``int` `j = 0; j < b; j++)  ` `    ``{ ` `        ``for` `(``int` `i = 0; i < a; i++)  ` `        ``{ ` `            ``if` `(k < l) ` `            ``{ ` `                ``arr[j, i] = s[k]; ` `            ``} ` `            ``k++; ` `        ``} ` `    ``} ` `  `  `    ``// Loop to generate  ` `    ``// decrypted String ` `    ``for` `(``int` `j = 0; j < a; j++)  ` `    ``{ ` `        ``for` `(``int` `i = 0; i < b; i++)  ` `        ``{ ` `            ``decrypted = decrypted +  ` `                        ``arr[i, j]; ` `        ``} ` `    ``} ` `    ``return` `decrypted; ` `} ` `  `  `// Driver Code ` `public` `static` `void` `Main(String[] args) ` `{ ` `    ``String s = ``"Geeks For Geeks"``; ` `    ``String encrypted; ` `    ``String decrypted; ` `      `  `    ``// Encryption of String ` `    ``encrypted = encryption(s.ToCharArray()); ` `    ``Console.Write(encrypted +``"\n"``); ` `      `  `    ``// Decryption of String ` `    ``decrypted = decryption(encrypted.ToCharArray()); ` `    ``Console.Write(decrypted); ` `} ` `} ` ` `  `// This code is contributed by PrinciRaj1992 `

Output:

```Gsree  keFGskoe
Geeks For Geeks
```

Don’t stop now and take your learning to the next level. Learn all the important concepts of Data Structures and Algorithms with the help of the most trusted course: DSA Self Paced. Become industry ready at a student-friendly price.

My Personal Notes arrow_drop_up Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.