private double eval(ADFGVX key) { threadingHelper.decryptions[taskId - 1]++; allPlain.length = 0; foreach (ADFGVXVector cipher in ciphers) { key.decode(cipher, interimCipher, plain); allPlain.append(plain); } allPlain.stats(); return(6000.0 * allPlain.IoC1 + 180000.0 * allPlain.IoC2); }
public void decodeSubstitution(ADFGVXVector interim, Alphabet36Vector plain) { if (interim.length % 2 != 0) { //hack, to allow uneven length adfgvx texts interim.append("A"); } plain.length = 0; for (int i = 0; i < interim.length; i += 2) { int v1 = interim.TextInInt[i]; int v2 = interim.TextInInt[i + 1]; if (v1 == -1 || v2 == -1) { plain.append(-1); } else { plain.append(this.substitutionInverseKey.TextInInt[v1 * 6 + v2]); } } }