/// <summary> /// Decrypts a file with the parameters. /// </summary> /// <param name="fileName"></param> /// <param name="outputFileName"></param> /// <param name="pass"></param> /// <param name="initial"></param> /// <param name="rounds"></param> /// <param name="leftoff"></param> /// <param name="expansion"></param> /// <param name="additionalKey"></param> /// <param name="callback"></param> /// <param name="adaptor"></param> public static void Decrypt(string fileName, string outputFileName, string pass, int initial, int rounds, int leftoff, int expansion, string additionalKey, BasylFileEncryption.Callback callback, BasylPseudoAdaptor adaptor) { Decrypt(File.OpenRead(fileName), File.OpenWrite(outputFileName), pass, initial, rounds, leftoff, expansion, additionalKey, callback, adaptor); }
/// <summary> /// Encrypts a file from the parameters. /// </summary> /// <param name="input"></param> /// <param name="output"></param> /// <param name="pass"></param> /// <param name="initial"></param> /// <param name="rounds"></param> /// <param name="leftoff"></param> /// <param name="expansion"></param> /// <param name="additionalKey"></param> /// <param name="callback"></param> public static void Encrypt(Stream input, Stream output, string pass, int initial, int rounds, int leftoff, int expansion, string additionalKey, BasylFileEncryption.Callback callback) { Encrypt(input, output, pass, initial, rounds, leftoff, expansion, additionalKey, callback, null); }
/// <summary> /// Encrypts a file from the parameters. /// </summary> /// <param name="input"></param> /// <param name="output"></param> /// <param name="pass"></param> /// <param name="initial"></param> /// <param name="rounds"></param> /// <param name="leftoff"></param> /// <param name="expansion"></param> /// <param name="additionalKey"></param> /// <param name="callback"></param> /// <param name="adaptor"></param> public static void Encrypt(Stream input, Stream output, string pass, int initial, int rounds, int leftoff, int expansion, string additionalKey, BasylFileEncryption.Callback callback, BasylPseudoAdaptor adaptor) { //The SHA guarantees that no two files will have the same key for encryption and decryption. byte[] sha = SHA256.Create().ComputeHash(input); input.Position = 0; BasylKeyGenerator bkg = new BasylKeyGenerator(pass, initial, rounds, leftoff, expansion, additionalKey, sha, adaptor); //write out the necessary randomized info. output.Write(sha, 0, 32); output.Write(bkg.GetSecondRandomizer(), 0, 4); output.Write(bkg.GetEncryptedKey1Random(), 0, 4); BESCipher cipher = new BESCipher(bkg); int speed = MAX_SPEED; while (speed > MIN_SPEED) { //Encrypt Entire File in Chunks byte[] buffer = new byte[speed]; while (input.Position + speed <= input.Length) { input.Read(buffer, 0, speed); cipher.EncryptRight(ref buffer); output.Write(buffer, 0, speed); if (callback != null) { callback((double)input.Position / input.Length); } } speed >>= 1; } input.Close(); output.Close(); }
/// <summary> /// Decrypts a file with the parameters. /// </summary> /// <param name="input"></param> /// <param name="output"></param> /// <param name="pass"></param> /// <param name="initial"></param> /// <param name="rounds"></param> /// <param name="leftoff"></param> /// <param name="expansion"></param> /// <param name="additionalKey"></param> /// <param name="callback"></param> public static void Decrypt(Stream input, Stream output, string pass, int initial, int rounds, int leftoff, int expansion, string additionalKey, BasylFileEncryption.Callback callback, BasylPseudoAdaptor adaptor) { //read in the necessary randomized info. byte[] sha = new byte[32]; byte[] f = new byte[4]; byte[] f2 = new byte[4]; input.Read(sha, 0, 32); input.Read(f2, 0, 4); input.Read(f, 0, 4); BasylKeyGenerator bkg = new BasylKeyGenerator(pass, initial, rounds, leftoff, expansion, additionalKey, sha, f, f2, true, adaptor); BESCipher cipher = new BESCipher(bkg); int speed = MAX_SPEED; while (speed > MIN_SPEED) { //Encrypt Entire File in Chunks byte[] buffer = new byte[speed]; while (input.Position + speed <= input.Length) { input.Read(buffer, 0, speed); cipher.EncryptLeft(ref buffer); output.Write(buffer, 0, speed); if (callback != null) { callback((double)input.Position / input.Length); } } speed >>= 1; } input.Close(); output.Close(); }