Skip to content
Related Articles

Related Articles

Improve Article

Encryption and Decryption of String according to given technique

  • Difficulty Level : Medium
  • Last Updated : 31 May, 2021

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. 
 

 



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 increments the variable having a 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 <bits/stdc++.h>
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

Javascript




<script>
 
// JavaScript implementation for Custom
// Encryption and Decryption of let
 
 
// Function to encrypt the let
function encryption(s) {
    let l = s.length;
    let b = Math.ceil(Math.sqrt(l));
    let a = Math.floor(Math.sqrt(l));
    let encrypted = '';
    if (b * a < l) {
        if (Math.min(b, a) == b) {
            b = b + 1;
        }
        else {
            a = a + 1;
        }
    }
 
    // Matrix to generate the
    // Encrypted let
    let arr = new Array();
 
    for (let i = 0; i < a; i++) {
        let temp = [];
        for (let j = 0; j < b; j++) {
            temp.push([])
        }
        arr.push(temp)
    }
 
    for (let i = 0; i < a; i++) {
        for (let j = 0; j < b; j++) {
            arr[i][j] = " "
        }
    }
 
 
    let k = 0;
 
    // Fill the matrix row-wise
    for (let j = 0; j < a; j++) {
        for (let i = 0; i < b; i++) {
            if (k < l) {
                arr[j][i] = s[k];
            }
            k++;
        }
    }
 
    // Loop to generate
    // encrypted let
    for (let j = 0; j < b; j++) {
        for (let i = 0; i < a; i++) {
            encrypted = encrypted +
                arr[i][j];
        }
    }
    return encrypted;
}
 
// Function to decrypt the let
function decryption(s) {
    let l = s.length;
    let b = Math.ceil(Math.sqrt(l));
    let a = Math.floor(Math.sqrt(l));
    let decrypted = '';
 
    // Matrix to generate the
    // Encrypted let
    let arr = new Array();
    for (let i = 0; i < a; i++) {
        let temp = [];
        for (let j = 0; j < b; j++) {
            temp.push([])
        }
        arr.push(temp)
    }
    for (let i = 0; i < a; i++) {
        for (let j = 0; j < b; j++) {
            arr[i][j] = " "
        }
    }
    let k = 0;
 
    // Fill the matrix column-wise
    for (let j = 0; j < b; j++) {
        for (let i = 0; i < a; i++) {
            if (k < l) {
                arr[j][i] = s[k];
            }
            k++;
        }
    }
 
    // Loop to generate
    // decrypted let
    for (let j = 0; j < a; j++) {
        for (let i = 0; i < b; i++) {
            decrypted = decrypted + arr[i][j];
        }
    }
    return decrypted;
}
 
// Driver Code
 
let s = "Geeks For Geeks";
let encrypted;
let decrypted;
 
// Encryption of let
encrypted = encryption(s);
document.write(encrypted + "<br>");
 
// Decryption of let
decrypted = decryption(encrypted);
document.write(decrypted);
 
// This code is contributed by gfgking
 
</script>
Output: 
Gsree  keFGskoe 
Geeks For Geeks

 

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.  To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.

In case you wish to attend live classes with experts, please refer DSA Live Classes for Working Professionals and Competitive Programming Live for Students.




My Personal Notes arrow_drop_up
Recommended Articles
Page :