Fix formatting in Ciphers package (#2756)

This commit is contained in:
Yang Libin 2021-10-29 13:19:42 +08:00 committed by GitHub
parent 0503c46680
commit 794719c773
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
11 changed files with 1269 additions and 1380 deletions

View File

@ -55,7 +55,9 @@ public class AES {
0x8C, 0xA1, 0x89, 0x0D, 0xBF, 0xE6, 0x42, 0x68, 0x41, 0x99, 0x2D, 0x0F, 0xB0, 0x54, 0xBB, 0x16 0x8C, 0xA1, 0x89, 0x0D, 0xBF, 0xE6, 0x42, 0x68, 0x41, 0x99, 0x2D, 0x0F, 0xB0, 0x54, 0xBB, 0x16
}; };
/** Inverse Rijndael S-box Substitution table used for decryption in the subBytesDec step. */ /**
* Inverse Rijndael S-box Substitution table used for decryption in the subBytesDec step.
*/
private static final int[] INVERSE_SBOX = { private static final int[] INVERSE_SBOX = {
0x52, 0x09, 0x6A, 0xD5, 0x30, 0x36, 0xA5, 0x38, 0xBF, 0x40, 0xA3, 0x9E, 0x81, 0xF3, 0xD7, 0xFB, 0x52, 0x09, 0x6A, 0xD5, 0x30, 0x36, 0xA5, 0x38, 0xBF, 0x40, 0xA3, 0x9E, 0x81, 0xF3, 0xD7, 0xFB,
0x7C, 0xE3, 0x39, 0x82, 0x9B, 0x2F, 0xFF, 0x87, 0x34, 0x8E, 0x43, 0x44, 0xC4, 0xDE, 0xE9, 0xCB, 0x7C, 0xE3, 0x39, 0x82, 0x9B, 0x2F, 0xFF, 0x87, 0x34, 0x8E, 0x43, 0x44, 0xC4, 0xDE, 0xE9, 0xCB,

View File

@ -1,13 +1,8 @@
package Ciphers; package Ciphers;
import javax.crypto.*;
import java.security.InvalidKeyException; import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException; import java.security.NoSuchAlgorithmException;
import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.KeyGenerator;
import javax.crypto.NoSuchPaddingException;
import javax.crypto.SecretKey;
/** /**
* This example program shows how AES encryption and decryption can be done in Java. Please note * This example program shows how AES encryption and decryption can be done in Java. Please note
@ -17,6 +12,7 @@ import javax.crypto.SecretKey;
public class AESEncryption { public class AESEncryption {
private static final char[] HEX_ARRAY = "0123456789ABCDEF".toCharArray(); private static final char[] HEX_ARRAY = "0123456789ABCDEF".toCharArray();
/** /**
* 1. Generate a plain text for encryption 2. Get a secret key (printed in hexadecimal form). In * 1. Generate a plain text for encryption 2. Get a secret key (printed in hexadecimal form). In
* actual use this must by encrypted and kept safe. The same key is required for decryption. * actual use this must by encrypted and kept safe. The same key is required for decryption.

View File

@ -1,36 +1,23 @@
//The key for the Affine cipher consists of 2 numbers, well call them a and b.
// The following discussion assumes the use of a 26 character alphabet (m = 26).
// a should be chosen to be relatively prime to m (i.e. a should have no factors in common with m).
package Ciphers; package Ciphers;
import java.util.Scanner; class AffineCipher {
class AffineCipher // Key values of a and b
{ static int a = 17;
static Scanner in = new Scanner(System.in); static int b = 20;
static String encryptMessage(char[] msg) static String encryptMessage(char[] msg) {
{ /// Cipher Text initially empty
System.out.println("Enter key value a for encryption : ");
int a = in.nextInt();
System.out.println("Enter key value b for encryption : ");
int b = in.nextInt();
/// Initially empty cipher String
String cipher = ""; String cipher = "";
for (int i = 0; i < msg.length; i++) for (int i = 0; i < msg.length; i++) {
{
// Avoid space to be encrypted // Avoid space to be encrypted
/* applying encryption formula ( a x + b ) mod m /* applying encryption formula ( a x + b ) mod m
{here x is msg[i] and m is 26} and added 'A' to {here x is msg[i] and m is 26} and added 'A' to
bring it in range of ascii alphabet[ 65-90 | A-Z ] */ bring it in range of ascii alphabet[ 65-90 | A-Z ] */
if (msg[i] != ' ') if (msg[i] != ' ') {
{
cipher = cipher cipher = cipher
+ (char) ((((a * (msg[i] - 'A')) + b) % 26) + 'A'); + (char) ((((a * (msg[i] - 'A')) + b) % 26) + 'A');
} else // append space character } else // else simply append space character
{ {
cipher += msg[i]; cipher += msg[i];
} }
@ -38,42 +25,30 @@ class AffineCipher
return cipher; return cipher;
} }
static String decryptCipher(String cipher) static String decryptCipher(String cipher) {
{
System.out.println("Enter key value a for decryption : ");
int a = in.nextInt();
System.out.println("Enter key value b for decryption : ");
int b = in.nextInt();
String msg = ""; String msg = "";
int a_inv = 0; int a_inv = 0;
int flag = 0; int flag = 0;
//Find a^-1 (the multiplicative inverse of a //Find a^-1 (the multiplicative inverse of a
//in the group of integers modulo m.) //in the group of integers modulo m.)
for (int i = 0; i < 26; i++) for (int i = 0; i < 26; i++) {
{
flag = (a * i) % 26; flag = (a * i) % 26;
// Check if (a*i)%26 == 1, // Check if (a*i)%26 == 1,
// if so, then i will be the multiplicative inverse of a // then i will be the multiplicative inverse of a
if (flag == 1) if (flag == 1) {
{
a_inv = i; a_inv = i;
} }
} }
for (int i = 0; i < cipher.length(); i++) for (int i = 0; i < cipher.length(); i++) {
{
/*Applying decryption formula a^-1 ( x - b ) mod m /*Applying decryption formula a^-1 ( x - b ) mod m
{here x is cipher[i] and m is 26} and added 'A' {here x is cipher[i] and m is 26} and added 'A'
to bring it in range of ASCII alphabet[ 65-90 | A-Z ] */ to bring it in range of ASCII alphabet[ 65-90 | A-Z ] */
if (cipher.charAt(i) != ' ') if (cipher.charAt(i) != ' ') {
{
msg = msg + (char) (((a_inv * msg = msg + (char) (((a_inv *
((cipher.charAt(i) + 'A' - b)) % 26)) + 'A'); ((cipher.charAt(i) + 'A' - b)) % 26)) + 'A');
} } else //else simply append space character
else // append space character
{ {
msg += cipher.charAt(i); msg += cipher.charAt(i);
} }
@ -82,17 +57,17 @@ class AffineCipher
return msg; return msg;
} }
// Main method // Driver code
public static void main(String[] args) public static void main(String[] args) {
{
String msg = "AFFINE CIPHER"; String msg = "AFFINE CIPHER";
// Encrypting message // Calling encryption function
String cipherText = encryptMessage(msg.toCharArray()); String cipherText = encryptMessage(msg.toCharArray());
System.out.println("Encrypted Message is : " + cipherText); System.out.println("Encrypted Message is : " + cipherText);
// Decrypting message // Calling Decryption function
System.out.println("Decrypted Message is: " + decryptCipher(cipherText)); System.out.println("Decrypted Message is: " + decryptCipher(cipherText));
} }
} }

View File

@ -114,7 +114,9 @@ public class ColumnarTranspositionCipher {
} }
} }
/** @return charValues */ /**
* @return charValues
*/
private static Object[] findElements() { private static Object[] findElements() {
Object[] charValues = new Object[keyword.length()]; Object[] charValues = new Object[keyword.length()];
for (int i = 0; i < charValues.length; i++) { for (int i = 0; i < charValues.length; i++) {

View File

@ -1,6 +1,6 @@
package Ciphers; package Ciphers;
import java.util.*; import java.util.Scanner;
/* /*
* Java Implementation of Hill Cipher * Java Implementation of Hill Cipher
@ -16,8 +16,7 @@ static Scanner in = new Scanner (System.in);
/* Following function encrypts the message /* Following function encrypts the message
*/ */
static void encrypt(String message) static void encrypt(String message) {
{
message = message.toUpperCase(); message = message.toUpperCase();
// Get key matrix // Get key matrix
System.out.println("Enter key matrix size"); System.out.println("Enter key matrix size");
@ -30,8 +29,7 @@ static void encrypt(String message)
} }
} }
//check if det = 0 //check if det = 0
if(determinant(keyMatrix,n)%26 == 0) if (determinant(keyMatrix, n) % 26 == 0) {
{
System.out.println("Invalid key, as determinant = 0. Program Terminated"); System.out.println("Invalid key, as determinant = 0. Program Terminated");
return; return;
} }
@ -42,19 +40,18 @@ static void encrypt(String message)
int j = 0; int j = 0;
while (j < message.length()) { while (j < message.length()) {
for (int i = 0; i < n; i++) { for (int i = 0; i < n; i++) {
if(j>=message.length()){ messageVector[i][0] = 23;} if (j >= message.length()) {
else messageVector[i][0] = 23;
} else
messageVector[i][0] = (message.charAt(j)) % 65; messageVector[i][0] = (message.charAt(j)) % 65;
System.out.println(messageVector[i][0]); System.out.println(messageVector[i][0]);
j++; j++;
} }
int x, i; int x, i;
for (i = 0; i < n; i++) for (i = 0; i < n; i++) {
{
cipherMatrix[i][0] = 0; cipherMatrix[i][0] = 0;
for (x = 0; x < n; x++) for (x = 0; x < n; x++) {
{
cipherMatrix[i][0] += keyMatrix[i][x] * messageVector[x][0]; cipherMatrix[i][0] += keyMatrix[i][x] * messageVector[x][0];
} }
System.out.println(cipherMatrix[i][0]); System.out.println(cipherMatrix[i][0]);
@ -65,9 +62,9 @@ static void encrypt(String message)
} }
System.out.println("Ciphertext: " + CipherText); System.out.println("Ciphertext: " + CipherText);
} }
//Following function decrypts a message //Following function decrypts a message
static void decrypt(String message) static void decrypt(String message) {
{
message = message.toUpperCase(); message = message.toUpperCase();
// Get key matrix // Get key matrix
System.out.println("Enter key matrix size"); System.out.println("Enter key matrix size");
@ -80,8 +77,7 @@ static void decrypt(String message)
} }
} }
//check if det = 0 //check if det = 0
if(determinant(keyMatrix,n)%26 == 0) if (determinant(keyMatrix, n) % 26 == 0) {
{
System.out.println("Invalid key, as determinant = 0. Program Terminated"); System.out.println("Invalid key, as determinant = 0. Program Terminated");
return; return;
} }
@ -92,19 +88,18 @@ static void decrypt(String message)
int j = 0; int j = 0;
while (j < message.length()) { while (j < message.length()) {
for (int i = 0; i < n; i++) { for (int i = 0; i < n; i++) {
if(j>=message.length()){ messageVector[i][0] = 23;} if (j >= message.length()) {
else messageVector[i][0] = 23;
} else
messageVector[i][0] = (message.charAt(j)) % 65; messageVector[i][0] = (message.charAt(j)) % 65;
System.out.println(messageVector[i][0]); System.out.println(messageVector[i][0]);
j++; j++;
} }
int x, i; int x, i;
for (i = 0; i < n; i++) for (i = 0; i < n; i++) {
{
plainMatrix[i][0] = 0; plainMatrix[i][0] = 0;
for (x = 0; x < n; x++) for (x = 0; x < n; x++) {
{
plainMatrix[i][0] += keyMatrix[i][x] * messageVector[x][0]; plainMatrix[i][0] += keyMatrix[i][x] * messageVector[x][0];
} }
@ -122,11 +117,11 @@ public static int determinant(int a[][], int n){
if (n == 1) { if (n == 1) {
det = a[0][0]; det = a[0][0];
} } else {
else{
int b[][] = new int[n - 1][n - 1]; int b[][] = new int[n - 1][n - 1];
for (int x = 0; x < n; x++) { for (int x = 0; x < n; x++) {
p=0;q=0; p = 0;
q = 0;
for (int i = 1; i < n; i++) { for (int i = 1; i < n; i++) {
for (int j = 0; j < n; j++) { for (int j = 0; j < n; j++) {
if (j != x) { if (j != x) {
@ -146,8 +141,7 @@ public static int determinant(int a[][], int n){
} }
// Function to implement Hill Cipher // Function to implement Hill Cipher
static void hillcipher(String message) static void hillcipher(String message) {
{
message.toUpperCase(); message.toUpperCase();
System.out.println("What do you want to process from the message?"); System.out.println("What do you want to process from the message?");
System.out.println("Press 1: To Encrypt"); System.out.println("Press 1: To Encrypt");
@ -162,8 +156,7 @@ static void hillcipher(String message)
} }
// Driver code // Driver code
public static void main(String[] args) public static void main(String[] args) {
{
// Get the message to be encrypted // Get the message to be encrypted
System.out.println("Enter message"); System.out.println("Enter message");
String message = in.nextLine(); String message = in.nextLine();

View File

@ -1,10 +1,12 @@
package Ciphers; package Ciphers;
import javax.swing.*;
import java.math.BigInteger; import java.math.BigInteger;
import java.security.SecureRandom; import java.security.SecureRandom;
import javax.swing.JOptionPane;
/** @author Nguyen Duy Tiep on 23-Oct-17. */ /**
* @author Nguyen Duy Tiep on 23-Oct-17.
*/
public final class RSA { public final class RSA {
public static void main(String[] args) { public static void main(String[] args) {

View File

@ -1,18 +1,17 @@
package ciphers; package ciphers;
import java.util.*; import java.util.HashMap;
import java.util.Map;
/** /**
*
* The simple substitution cipher is a cipher that has been in use for many hundreds of years * The simple substitution cipher is a cipher that has been in use for many hundreds of years
* (an excellent history is given in Simon Singhs 'the Code Book'). * (an excellent history is given in Simon Singhs 'the Code Book').
* It basically consists of substituting every plaintext character for a different ciphertext character. * It basically consists of substituting every plaintext character for a different ciphertext character.
* It differs from the Caesar cipher in that the cipher alphabet is not simply the alphabet shifted, * It differs from the Caesar cipher in that the cipher alphabet is not simply the alphabet shifted,
* it is completely jumbled. * it is completely jumbled.
*
*/ */
public class simpleSubCipher { public class SimpleSubCipher {
/** /**
* Encrypt text by replacing each element with its opposite character. * Encrypt text by replacing each element with its opposite character.
@ -25,7 +24,7 @@ public class simpleSubCipher {
String encoded = ""; String encoded = "";
// This map is used to encode // This map is used to encode
Map<Character,Character> cipherMap = new HashMap<Character,Character>(); Map<Character, Character> cipherMap = new HashMap<>();
char beginSmallLetter = 'a'; char beginSmallLetter = 'a';
char beginCapitalLetter = 'A'; char beginCapitalLetter = 'A';

View File

@ -1,6 +1,7 @@
package Ciphers; package Ciphers;
import java.util.*; import java.util.HashMap;
import java.util.Map;
/** /**
* The simple substitution cipher is a cipher that has been in use for many hundreds of years (an * The simple substitution cipher is a cipher that has been in use for many hundreds of years (an
@ -74,7 +75,9 @@ public class SimpleSubstitutionCipher {
return decoded.toString(); return decoded.toString();
} }
/** TODO remove main and make JUnit Testing */ /**
* TODO remove main and make JUnit Testing
*/
public static void main(String[] args) { public static void main(String[] args) {
String a = encode("defend the east wall of the castle", "phqgiumeaylnofdxjkrcvstzwb"); String a = encode("defend the east wall of the castle", "phqgiumeaylnofdxjkrcvstzwb");
String b = decode(a, "phqgiumeaylnofdxjkrcvstzwb"); String b = decode(a, "phqgiumeaylnofdxjkrcvstzwb");

View File

@ -1,83 +0,0 @@
package Ciphers;
class affineCipher
{
// Key values of a and b
static int a = 17;
static int b = 20;
static String encryptMessage(char[] msg)
{
/// Cipher Text initially empty
String cipher = "";
for (int i = 0; i < msg.length; i++)
{
// Avoid space to be encrypted
/* applying encryption formula ( a x + b ) mod m
{here x is msg[i] and m is 26} and added 'A' to
bring it in range of ascii alphabet[ 65-90 | A-Z ] */
if (msg[i] != ' ')
{
cipher = cipher
+ (char) ((((a * (msg[i] - 'A')) + b) % 26) + 'A');
} else // else simply append space character
{
cipher += msg[i];
}
}
return cipher;
}
static String decryptCipher(String cipher)
{
String msg = "";
int a_inv = 0;
int flag = 0;
//Find a^-1 (the multiplicative inverse of a
//in the group of integers modulo m.)
for (int i = 0; i < 26; i++)
{
flag = (a * i) % 26;
// Check if (a*i)%26 == 1,
// then i will be the multiplicative inverse of a
if (flag == 1)
{
a_inv = i;
}
}
for (int i = 0; i < cipher.length(); i++)
{
/*Applying decryption formula a^-1 ( x - b ) mod m
{here x is cipher[i] and m is 26} and added 'A'
to bring it in range of ASCII alphabet[ 65-90 | A-Z ] */
if (cipher.charAt(i) != ' ')
{
msg = msg + (char) (((a_inv *
((cipher.charAt(i) + 'A' - b)) % 26)) + 'A');
}
else //else simply append space character
{
msg += cipher.charAt(i);
}
}
return msg;
}
// Driver code
public static void main(String[] args)
{
String msg = "AFFINE CIPHER";
// Calling encryption function
String cipherText = encryptMessage(msg.toCharArray());
System.out.println("Encrypted Message is : " + cipherText);
// Calling Decryption function
System.out.println("Decrypted Message is: " + decryptCipher(cipherText));
}
}