/// <summary> /// Ricordiamoci che l'accesso deve essere gerarchico /// un può essere acceduto con piu di un una chiave /// </summary> /// <param name="keys"></param> public void Encrypt(List<string> keys) { if (keys.Count == 0) return; // Non fare niente se il file presenta già un protocollo di sicurezza var aglService = new FileAGLService(Filename); if (aglService.Exists() == true) return; string currentPassword = string.Empty; foreach (var key in keys) currentPassword += key; Encrypt(currentPassword); // Ora resta da scrivere, sul file, la parte riguardante l'AGL string securityPhrase = FileAGLService.SecurityPhrase; if (keys.Count > 1) securityPhrase += ":" + currentPassword; aglService = new FileAGLService(Filename); aglService.Write(securityPhrase, keys); }
public bool Decrypt(string key, bool ownermode = true) { string password = key; var aglService = new FileAGLService(Filename); string decryptoAGL = string.Empty; if (aglService.Access(key, out decryptoAGL)) { if (decryptoAGL.Contains(FileAGLService.SecurityPhrase + ":")) password = decryptoAGL.Replace(FileAGLService.SecurityPhrase + ":", string.Empty); } else return false; int aglSize = aglService.Size(); var stream = new FileStream(Filename, FileMode.Open, FileAccess.Read, FileShare.ReadWrite); // Ottieni la lunghezza dell'header stream.Seek(0, SeekOrigin.Begin); byte[] headerSizeBytes = new byte[sizeof(int)]; stream.Read(headerSizeBytes, 0, headerSizeBytes.Length); int headerSize = BitConverter.ToInt32(headerSizeBytes, 0); // leggi l'header var headerBytes = new byte[headerSize]; stream.Read(headerBytes, 0, headerBytes.Length); // decripta l'header byte[] decrypto; try { decrypto = RijndaelService.DecryptBytes(headerBytes, password); Key = password; } catch (Exception) { return false; } // se è riuscito a decriptarlo, sostituisci il file con quello originale, rimuovendo anchel'AGL var bytes = new byte[stream.Length - sizeof(int) - headerBytes.Length - aglSize]; stream.Read(bytes, 0, bytes.Length); stream.Close(); stream.Dispose(); // Ripristina il file stream = new FileStream(Filename, FileMode.Create, FileAccess.Write, FileShare.ReadWrite); // All'inizio del blocco specifica il numero dei byte adibiti all'header section stream.Write(decrypto, 0, decrypto.Length); stream.Write(bytes, 0, bytes.Length); stream.Close(); stream.Dispose(); return true; }
/// <summary> /// Ricordiamoci che l'accesso deve essere gerarchico /// un può essere acceduto con piu di un una chiave /// </summary> /// <param name="keys"></param> public void Encrypt(List <string> keys) { if (keys.Count == 0) { return; } // Non fare niente se il file presenta già un protocollo di sicurezza var aglService = new FileAGLService(Filename); if (aglService.Exists() == true) { return; } string currentPassword = string.Empty; foreach (var key in keys) { currentPassword += key; } Encrypt(currentPassword); // Ora resta da scrivere, sul file, la parte riguardante l'AGL string securityPhrase = FileAGLService.SecurityPhrase; if (keys.Count > 1) { securityPhrase += ":" + currentPassword; } aglService = new FileAGLService(Filename); aglService.Write(securityPhrase, keys); }
public bool Decrypt(string key, bool ownermode = true) { string password = key; var aglService = new FileAGLService(Filename); string decryptoAGL = string.Empty; if (aglService.Access(key, out decryptoAGL)) { if (decryptoAGL.Contains(FileAGLService.SecurityPhrase + ":")) { password = decryptoAGL.Replace(FileAGLService.SecurityPhrase + ":", string.Empty); } } else { return(false); } int aglSize = aglService.Size(); var stream = new FileStream(Filename, FileMode.Open, FileAccess.Read, FileShare.ReadWrite); // Ottieni la lunghezza dell'header stream.Seek(0, SeekOrigin.Begin); byte[] headerSizeBytes = new byte[sizeof(int)]; stream.Read(headerSizeBytes, 0, headerSizeBytes.Length); int headerSize = BitConverter.ToInt32(headerSizeBytes, 0); // leggi l'header var headerBytes = new byte[headerSize]; stream.Read(headerBytes, 0, headerBytes.Length); // decripta l'header byte[] decrypto; try { decrypto = RijndaelService.DecryptBytes(headerBytes, password); Key = password; } catch (Exception) { return(false); } // se è riuscito a decriptarlo, sostituisci il file con quello originale, rimuovendo anchel'AGL var bytes = new byte[stream.Length - sizeof(int) - headerBytes.Length - aglSize]; stream.Read(bytes, 0, bytes.Length); stream.Close(); stream.Dispose(); // Ripristina il file stream = new FileStream(Filename, FileMode.Create, FileAccess.Write, FileShare.ReadWrite); // All'inizio del blocco specifica il numero dei byte adibiti all'header section stream.Write(decrypto, 0, decrypto.Length); stream.Write(bytes, 0, bytes.Length); stream.Close(); stream.Dispose(); return(true); }