 65dbd8cae2
			
		
	
	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.
		
			
				
	
	
		
			82 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			82 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| using System;
 | |
| using System.Linq;
 | |
| using System.IO;
 | |
| using System.Text;
 | |
| using System.Collections.Generic;
 | |
| 
 | |
| namespace AniNIX.Crypto {
 | |
|     public class Affine : Cipher {
 | |
| 
 | |
|         public override String Description() { return "The Affine cipher\nKey format is two numbers, where the second number is coprime to the first."; } 
 | |
|         public override String Command() {return "affine";} 
 | |
|         public Affine(Workbench w) : base (w) {}
 | |
| 
 | |
|         public override String Encrypt(String workSpace,String inputText,String[] line) {
 | |
|             if (line == null || line.Length != 4) { 
 | |
|                 Console.Error.WriteLine("Malformed!");
 | |
|                 return workSpace;
 | |
|             }
 | |
|             char[] changed = workSpace.ToCharArray();
 | |
|             try { 
 | |
|                 int a = Int32.Parse(line[2]);
 | |
|                 try { 
 | |
|                     MultiplicativeInverse(a);
 | |
|                 } catch (Exception e) {
 | |
|                     Console.Error.WriteLine(String.Format("Value a <{0}> is not coprime to 26.\n{1}",a,e.Message));
 | |
|                     return workSpace;
 | |
|                 }
 | |
|                 int b = Int32.Parse(line[3]);
 | |
|                 for (int i = 0; i <  changed.Length; i++) {
 | |
|                     if (Char.IsLetter(changed[i])) {
 | |
|                         int baseC = (Char.IsUpper(changed[i])) ? (int)'A' : (int)'a';
 | |
|                         int modC = (int)changed[i] - baseC;
 | |
|                         changed[i] = (char)(((a*modC+b)%26)+baseC);
 | |
|                     }
 | |
|                 }
 | |
|             } catch (Exception e) {
 | |
|                 Console.Error.WriteLine(String.Format("Failed!\n{0}",e.Message));
 | |
|                 return workSpace;
 | |
|             }
 | |
|             return new String(changed);
 | |
|         }
 | |
| 
 | |
|         public  int MultiplicativeInverse(int a) {
 | |
|             for (int x=1; x < 27; x++) {
 | |
|                 if ((a*x)%26 == 1) {
 | |
|                     Console.WriteLine(String.Format("Found Multiplicative Inverse of {0}",x));
 | |
|                     return x;
 | |
|                 }
 | |
|             }
 | |
|             throw new Exception("A is not coprime.");
 | |
|         }
 | |
| 
 | |
|         public override String Decrypt(String workSpace,String inputText,String[] line) {
 | |
|             if (line == null || line.Length != 4) { 
 | |
|                 Console.Error.WriteLine("Malformed!");
 | |
|                 return workSpace;
 | |
|             }
 | |
|             char[] changed = workSpace.ToCharArray();
 | |
|             try { 
 | |
|                 int a = Int32.Parse(line[2]); 
 | |
|                 int b = Int32.Parse(line[3]);
 | |
|                 int multiinv = MultiplicativeInverse(a);
 | |
|                 for (int i = 0; i <  changed.Length; i++) {
 | |
|                     if (Char.IsLetter(changed[i])) {
 | |
|                         int baseC = (Char.IsUpper(changed[i])) ? (int)'A' : (int)'a';
 | |
|                         int modC = (int)changed[i] - baseC;
 | |
|                         int modResult = (multiinv * (modC-b))%26;
 | |
|                         modResult = (modResult < 0) ? modResult+26 : modResult; // In case modResult is negative, add 26 back
 | |
|                         changed[i] = (char)(modResult+baseC);
 | |
|                     }
 | |
|                 }
 | |
|             } catch (Exception e) {
 | |
|                 Console.Error.WriteLine(String.Format("Failed!\n{0}",e.Message));
 | |
|                 return workSpace;
 | |
|             }
 | |
|             return new String(changed);
 | |
| 
 | |
|         }
 | |
| 
 | |
|     }
 | |
| }
 |