public static void decode(Vector key, Vector cipher, Vector plain) { Vector inverseKey = new AlphabetVector(key.length, false); inverseKey.inverseOf(key); decodeWithInverseKey(inverseKey, cipher, plain); }
public ADFGVX(String name, int transpositionKeyLength) { this.name = name; transpositionKey = new AlphabetVector(transpositionKeyLength, false); transpositionInverseKey = new AlphabetVector(transpositionKeyLength, false); substitutionKey = new Alphabet36Vector(); substitutionInverseKey = new Alphabet36Vector(); substitutionKey.acceptErrors = true; substitutionInverseKey.acceptErrors = true; resetTranspositionKey(); resetSubstitutionKey(); }
public void setTranspositionKey(AlphabetVector transpositionKey) { this.transpositionKey.copy(transpositionKey); updateTranspositionInverseKey(); }
public void SANgramsIC() { AlphabetVector keepTranspositionKey = new AlphabetVector(keyLength, false); AlphabetVector newTranspositionKey = new AlphabetVector(keyLength, false); ADFGVX key = new ADFGVX("", keyLength); TranspositionTransformations transforms = new TranspositionTransformations(keyLength, true, true, true); for (int cycles = 1; cycles <= restarts; cycles++) { if (cycles % 10 == 0) { analyzer.LogText += Environment.NewLine + "Task id: " + taskId + " starting with cycle: " + cycles; } key.randomTranspositionKey(); double score = eval(key); double startTemp = 500.0; double endTemp = 20.0; double delta = 20.0; double temp = startTemp; for (int step = 0; temp >= endTemp; step++, temp -= delta) { transforms.randomize(); int size = transforms.size(); for (int i = 0; i < size; i++) { keepTranspositionKey.copy(key.transpositionKey); transforms.transform(keepTranspositionKey.TextInInt, newTranspositionKey.TextInInt, keyLength, i); key.setTranspositionKey(newTranspositionKey); double newScore = eval(key); if (SimulatedAnnealing.accept(newScore, score, temp)) { score = newScore; if (score > threadingHelper.bestOverall) { printIfBest(key, cycles, step, score, temp, deviation); } } else { key.setTranspositionKey(keepTranspositionKey); } } // Update PresentationView long alldecryptions = 0; lock (threadingHelper.decryptionsLock) { foreach (long d in threadingHelper.decryptions) { alldecryptions += d; } threadingHelper.UpdateDisplayEnd(keyLength, alldecryptions, restarts * (long)(startTemp / delta) * size + restarts); } } } //log.LogText("Task " + taskId + " Fertig", Logtype.Info); }