package org.jdamico.jrfc.cipher; public class RailFenceCipher { public String encrypt(String plainText, int key){ int plainTextLength = plainText.length(); while (plainTextLength % key != 0) { plainText = plainText + " "; plainTextLength++; } int idx = plainTextLength / key; int counterPart = 0; String[] part = new String[idx]; for (int i = 0; i < plainText.length(); i = i + key) { part[counterPart] = plainText.substring(i, i + key); counterPart++; } StringBuffer enc = new StringBuffer(); for (int k = 0; k < key; k++) { int step = key; if(step % 2 !=0){ if (k % 2 == 0) step++; else step--; } for (int l = k; l < idx; l = l + step) enc.append(part[l]); } return enc.toString(); } public String decrypt(String cipheredText, int key){ int idx = cipheredText.length() / key; int counterPart = 0; String[] decPos = new String[idx]; String[] part = new String[idx]; for (int i = 0; i < cipheredText.length(); i = i + key) { part[counterPart] = cipheredText.substring(i, i + key); counterPart++; } StringBuffer dec = new StringBuffer(); String spos = " "; int encCounter = 0; for (int k = 0; k < key; k++) { int step = key; if(step % 2 !=0){ if (k % 2 == 0) step++; else step--; } for (int l = k; l < idx; l = l + step) { spos = spos + l + "(" + encCounter + ") "; decPos[l] = part[encCounter]; encCounter++; } spos = " "; } for (int y = 0; y < idx; y++) dec.append(decPos[y]); return dec.toString(); } }