65dbd8cae2
Old Log: ------------------------------------------------------------ revno: 16 committer: cxford <cxford@aninix.net> branch nick: CryptoWorkbench timestamp: Sun 2016-07-10 20:22:37 -0500 message: Some fixes for regex, captive shells, analysis ------------------------------------------------------------ revno: 15 committer: dev <dev@aninix.net> branch nick: CryptoWorkbench timestamp: Thu 2016-07-07 13:54:04 -0500 message: Adding captivecrypto.bash shell to go with ForceCommand ------------------------------------------------------------ revno: 14 committer: dev <dev@aninix.net> branch nick: CryptoWorkbench timestamp: Thu 2016-07-07 13:38:21 -0500 message: Updating ------------------------------------------------------------ revno: 13 committer: cxford <cxford@aninix.net> branch nick: CryptoWorkbench timestamp: Tue 2016-07-05 13:20:34 -0500 message: Adding inline regex lookup Updating ciphers to use standard constructor -- now ciphers can be added from new class, new private in WorkBench, and new instantiation in Workbench constructor ------------------------------------------------------------ revno: 12 committer: dev <dev@aninix.net> branch nick: CryptoWorkbench timestamp: Sat 2016-06-18 10:16:40 -0500 message: GUI enhancements for colorizing. General updates. ------------------------------------------------------------ revno: 11 committer: dev <dev@aninix.net> branch nick: CryptoWorkbench timestamp: Mon 2016-05-09 12:21:57 -0500 message: Updated letter frequency in analysis Added reverse function in Simple Updated bash script with small fixes Updated cryptoworkbench Links function with link to frequency analysis ------------------------------------------------------------ revno: 10 committer: dev <dev@aninix.net> branch nick: CryptoWorkbench timestamp: Fri 2016-04-15 13:03:41 -0500 message: Syncing with new ciphers for Affine, Ubchi, Vignere, and Columnar Transposition. Analytics updated and general fixes included. Paradigm shift for cipher inheritance. ------------------------------------------------------------ revno: 9 committer: cxford <cxford@aninix.net> branch nick: CryptoWorkbench timestamp: Wed 2016-02-10 15:36:37 -0600 message: Added new class for simple operations, like string to upper/lower and removing spaces. Updated with file reading and writing. Added brute-force for Caesarian ciphers. Updated substition and analysis for better options. Improved CLI ------------------------------------------------------------ revno: 8 committer: root <root@aninix.net> branch nick: CryptoWorkbench timestamp: Mon 2016-02-01 13:44:20 -0600 message: Modified analysis to display doubled letters and notify of which letter is repeated when One-to-one query fails to find a one-to-one relationship ------------------------------------------------------------ revno: 7 committer: root <root@aninix.net> branch nick: CryptoWorkbench timestamp: Thu 2016-01-28 10:03:40 -0600 message: Lots of minor fixes. ------------------------------------------------------------ revno: 6 committer: root <root@aninix.net> branch nick: CryptoWorkbench timestamp: Wed 2016-01-20 09:29:54 -0600 message: Makefile had a small typo but it prevented installs. Worth a commit. ------------------------------------------------------------ revno: 5 committer: root <root@aninix.net> branch nick: CryptoWorkbench timestamp: Tue 2016-01-19 13:12:12 -0600 message: Added one-to-one query to Analysis for checking if a substitution or rotation remains one-to-one and to acquire the key Moved bash script to ease tab-completion ------------------------------------------------------------ revno: 4 committer: root <root@aninix.net> branch nick: CryptoWorkbench timestamp: Thu 2016-01-14 10:24:02 -0600 message: Renamed README to be consistent with other branches in repo. Added Caesarian functions Added analysis and substitution functions for letter substitution. ------------------------------------------------------------ revno: 3 committer: cxford <cxford@aninix.net> branch nick: CryptoWorkbench timestamp: Wed 2016-01-13 16:41:05 -0600 message: Added install files ------------------------------------------------------------ revno: 2 committer: cxford <cxford@aninix.net> branch nick: CryptoWorkbench timestamp: Wed 2016-01-13 16:30:10 -0600 message: Adding Makefile and source files. ------------------------------------------------------------ revno: 1 committer: cxford <cxford@aninix.net> branch nick: CryptoWorkbench timestamp: Wed 2016-01-13 10:29:31 -0600 message: Initializing project tree and adding Readme.
118 lines
4.3 KiB
Plaintext
118 lines
4.3 KiB
Plaintext
using System;
|
|
using System.Text;
|
|
|
|
namespace AniNIX.Crypto {
|
|
|
|
public class CharGrid {
|
|
|
|
protected char[][] theGrid;
|
|
|
|
///<Summary>
|
|
///Use this to even out grids so that columnar transpositions can be regular.
|
|
///</summary>
|
|
///<param name=input>The String to pad</param>
|
|
///<param name=width>How wide the grid should be</param>
|
|
///<returns>A paddded string</returns>
|
|
public static String RandPad(String input, int width) {
|
|
Random sRand = new Random();
|
|
int mod = input.Length%width;
|
|
if (mod == 0) return input;
|
|
char[] pad = new char[width-mod];
|
|
for (int i=0; i<pad.Length; i++) {
|
|
pad[i] = (char)(sRand.Next()%26 + (int)'A');
|
|
}
|
|
return input+(new String(pad));
|
|
}
|
|
|
|
private char[][] MakeGrid(String input, int width) {
|
|
int k=0;
|
|
int y=(input.Length%width == 0) ? input.Length/width : input.Length/width+1;
|
|
int remainingLength=input.Length;
|
|
char[][] newGrid = new char[y][];
|
|
for (int i=0; i < y; i++) {
|
|
newGrid[i] = new char[(remainingLength > width) ? width : remainingLength];
|
|
remainingLength -= width;
|
|
for (int j=0; j < newGrid[i].Length; j++) {
|
|
newGrid[i][j] = input[k++];
|
|
}
|
|
}
|
|
return newGrid;
|
|
}
|
|
|
|
private char[][] MakeVGrid(int length, int width) {
|
|
int y = (length%width == 0) ? length/width : length/width+1;
|
|
char[][] newGrid = new char[y][];
|
|
for (int i = 0; i < y; i++) {
|
|
newGrid[i] = new char[(length > width) ? width : length];
|
|
length -= width;
|
|
}
|
|
return newGrid;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Make a horizontal grid from the input of certain width. Make regular if wanted.
|
|
/// </summary>
|
|
/// <param name=input>String to make from</param>
|
|
/// <param name=width>How wide a grid to make </param>
|
|
/// <param name=isRegular>Should random padding be added to make this not a jagged array</param>
|
|
public CharGrid(String input,int width,bool isRegular=false) {
|
|
if (isRegular) input = RandPad(input,width);
|
|
theGrid = MakeGrid(input,width);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Make a vertical grid from the input of certain width. Make regular if wanted.
|
|
/// </summary>
|
|
/// <param name=input>String to make from</param>
|
|
/// <param name=width>How wide a grid to make </param>
|
|
/// <param name=order>What order should the columns be populated in?</param>
|
|
public CharGrid(String input,int width,int[] order) {
|
|
// Make a grid first.
|
|
theGrid = MakeVGrid(input.Length,width);
|
|
//Populate
|
|
int k = 0;
|
|
for (int j = 0; j < theGrid[0].Length; j++) {
|
|
for (int i = 0; i < theGrid.Length; i++) {
|
|
if (i != theGrid.Length-1 || order[j] < theGrid[i].Length) {
|
|
theGrid[i][order[j]] = input[k];
|
|
k++;
|
|
}
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
public override String ToString() {
|
|
StringBuilder sb = new StringBuilder();
|
|
sb.Append(String.Format("{0} {1} ------------->\n",theGrid.Length,theGrid[0].Length));
|
|
for (int j=0; j<theGrid.Length; j++) {
|
|
sb.Append("| ");
|
|
for (int i=0; i<theGrid[j].Length; i++) {
|
|
if (Char.IsLetter(theGrid[j][i])) {
|
|
sb.Append(String.Format("{0} ",theGrid[j][i]));
|
|
} else {
|
|
sb.Append(String.Format("A#{0} ",(int)theGrid[j][i]));
|
|
}
|
|
}
|
|
sb.AppendLine();
|
|
}
|
|
sb.Append("V\n");
|
|
return sb.ToString();
|
|
}
|
|
|
|
public char[][] ToArray() {
|
|
return theGrid;
|
|
}
|
|
|
|
// This is leftover in case you want to debug chargrid
|
|
/*public static void Main(String[] args) {
|
|
CharGrid cg = new CharGrid("helloiamanewcipher",5);
|
|
Console.Write(cg.ToString());
|
|
cg = new CharGrid("four",5,false);
|
|
Console.Write(cg.ToString());
|
|
return;
|
|
}*/
|
|
}
|
|
}
|
|
|