public static void TryDecryptString(byte[] contents, Func <byte[], bool> validate) { if (validate != null && validate(contents)) { TrySetNopAsDefault(); return; } for (var i = 0; i < cryptos.Length; i++) { var copy = GetCopy(contents); var crypto = cryptos[i]; crypto.Decrypt(copy); if (validate == null || validate(copy)) { // seems to have worked copy.CopyTo(contents, 0); if (validate != null && crypto != currentEncryption) { Console.WriteLine("Found crypto {0}", crypto); currentEncryption = crypto; PutCurrentInFront(); } return; } } Console.WriteLine("No crypto found for string!"); }
private static void TrySetNopAsDefault() { if (currentEncryption != null) { return; } currentEncryption = nopEncryption; PutCurrentInFront(); }
private void TrySetNopAsDefault() { if (currentEncryption != null || cryptoLocked) { return; } currentEncryption = nopEncryption; PutCurrentInFront(); }
public void TryDecryptString(byte[] contents, Func <byte[], bool> validate, bool ascii) { if (cryptoLocked) { currentEncryption.Decrypt(contents); return; } // Get score of data for each crypto var results = new DecryptedString[cryptos.Length]; for (var i = 0; i < cryptos.Length; i++) { var crypto = cryptos[i]; var copy = GetCopy(contents); crypto.Decrypt(copy); var score = getScoreForString(ascii ? Encoding.ASCII.GetString(copy) : Encoding.Unicode.GetString(copy), ascii); if (crypto == currentEncryption) { score += 5; } results[i] = new DecryptedString { decrypted = copy, score = score, crypto = crypto, }; } var orderedResults = results.OrderByDescending(x => x.score); // Take a wild guess, pick the first one var best = orderedResults.First(); currentEncryption = best.crypto; PutCurrentInFront(); best.decrypted.CopyTo(contents, 0); }
public void SetEncryption(IWzEncryption crypto) => _encryption.ForceCrypto(crypto, true);
public void ForceCrypto(IWzEncryption encryption, bool lockCrypto) { currentEncryption = encryption; cryptoLocked = lockCrypto; PutCurrentInFront(); }