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++ 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 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 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# 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 |
<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> |
Gsree keFGskoe Geeks For Geeks
Time Complexity: O(?n * ?n) ? O(n)
Auxiliary Space: O(n), where n is the length of the given string.