public string DecryptString(string input, string passwordToBeUsedInSecreKey) { input = input.Replace('|', '='); input = input.Replace('_', '/'); input = input.Replace('¬', '+'); SymmetricParameters myParameters = GenerateSymmetricParameters(passwordToBeUsedInSecreKey); Rijndael myAlg = Rijndael.Create(); myAlg.Key = myParameters.SecretKey; myAlg.IV = myParameters.IV; byte[] encryptedDataAsBytes = Convert.FromBase64String(input); //Converting user input to byte[] MemoryStream msEncryptedData = new MemoryStream(encryptedDataAsBytes); CryptoStream cs = new CryptoStream(msEncryptedData, myAlg.CreateDecryptor(), CryptoStreamMode.Read); MemoryStream msClearData = new MemoryStream(); cs.CopyTo(msClearData); byte[] clearDataAsBytes = msClearData.ToArray(); string clearData = Encoding.UTF32.GetString(clearDataAsBytes); //converting the cryptographic data to string return(clearData); }
public Stream HybridEncryptFile(Stream article, string username, string publickey) { //1. Generate the secret key and the IV from the username //>> SymmetricParameters SymmetricParameters myParameters = GenerateSymmetricParameters(username); //2.Encrypt the file using the methodEncryptSymmetricallyFile with the parameters from step 1. Stream encrypted = EncryptSymmetricallyFile(article, myParameters); //3. encrypt the secret key and the iv using the public key and using the method EncryptAsymmetricallyKey Stream encryptedSecretKey = EncryptAsymmetricallyKey(myParameters.SecretKey, publickey); Stream encryptedIV = EncryptAsymmetricallyKey(myParameters.IV, publickey); //4. you store the encrypted secret key(from no.3) + the encrypted iv (from no.3) + encrypted file content (from no.2) MemoryStream msEncryptedFile = new MemoryStream(); encryptedSecretKey.Position = 0; encryptedIV.Position = 0; encryptedSecretKey.CopyTo(msEncryptedFile); encryptedIV.CopyTo(msEncryptedFile); encrypted.Position = 0; encrypted.CopyTo(msEncryptedFile); return(msEncryptedFile); }
public SymmetricParameters GenerateSymmetricParameters(string input) { Rfc2898DeriveBytes rfc = new Rfc2898DeriveBytes(input, new byte[] { 20, 255, 1, 16, 54, 78, 68, 10, 52, 38, 20, 87, 91 }); Rijndael myAlg = Rijndael.Create(); SymmetricParameters myParams = new SymmetricParameters() { SecretKey = rfc.GetBytes(myAlg.KeySize / 8), IV = rfc.GetBytes(myAlg.BlockSize / 8) }; return(myParams); }
public MemoryStream EncryptSymmetricallyFile(Stream input, SymmetricParameters myParameters) { Rijndael myAlg = Rijndael.Create(); myAlg.Key = myParameters.SecretKey; myAlg.IV = myParameters.IV; CryptoStream cs = new CryptoStream(input, myAlg.CreateEncryptor(), CryptoStreamMode.Read); MemoryStream msEncryptedData = new MemoryStream(); cs.CopyTo(msEncryptedData); return(msEncryptedData); }