Расшифровка Umbraco с использованием кодировки MachineKey в C # - PullRequest
0 голосов
/ 18 декабря 2018

Я хочу сначала зашифровать некоторые узлы в редакторе контента Umbraco.Код ниже - тот, который я использую для шифрования.Я использую MachineKey.Protect для этого.

        try
        {
            MailMessage message1 = new MailMessage();
            MailMessage message2 = new MailMessage();
            SmtpClient client = new SmtpClient();
            string AfsenderEmail = model.Email;
            string AfsenderNavn = model.Name;

            string toAddress = Umbraco.Content(rootNode.Id).mailDerSendesTil;
            message1.From = new MailAddress(toAddress);
            message2.From = new MailAddress(toAddress);

            message1.Subject = $"{Umbraco.Content(rootNode.Id).overskriftPaaDenMailViFaar}";
            message1.Subject = message1.Subject.Replace("AfsenderEmail", AfsenderEmail);
            message1.Subject = message1.Subject.Replace("AfsenderNavn", AfsenderNavn);
            message1.Body = $"{Umbraco.Content(rootNode.Id).beskedViFaarNaarBeskedenSendes}";
            message1.Body = message1.Body.Replace("AfsenderEmail", AfsenderEmail);
            message1.Body = message1.Body.Replace("AfsenderNavn", AfsenderNavn);


            message1.To.Add(new MailAddress(toAddress));


            client.Send(message1);

            message2.Subject = $"{Umbraco.Content(rootNode.Id).overskriftPaaMeddelelsenAfsenderenFaar}";
            message2.Subject = message2.Subject.Replace("AfsenderEmail", AfsenderEmail);
            message2.Subject = message2.Subject.Replace("AfsenderNavn", AfsenderNavn);
            message2.Body = $"{Umbraco.Content(rootNode.Id).beskedAfsenderenFaarNaarBeskedenSendes}";
            message2.Body = message2.Body.Replace("AfsenderEmail", AfsenderEmail);
            message2.Body = message2.Body.Replace("AfsenderNavn", AfsenderNavn);

            message2.To.Add(new MailAddress(AfsenderEmail));

            client.Send(message2);

            var beskederNode = Umbraco.TypedContentAtRoot().FirstOrDefault(x => x.ContentType.Alias.Equals("Besked"));

            var encryptName = MachineKey.Protect(Encoding.ASCII.GetBytes(model.Name));
            var encryptEmail = MachineKey.Protect(Encoding.ASCII.GetBytes(model.Email));
            var encryptMessage = MachineKey.Protect(Encoding.ASCII.GetBytes(model.Message));

            string nameEncrypted = Encoding.ASCII.GetString(encryptName);
            string emailEncrypted = Encoding.ASCII.GetString(encryptEmail);
            string messageEncrypted = Encoding.ASCII.GetString(encryptMessage);

            var newContent = contentService.CreateContent(nameEncrypted, beskederNode.Id, "mails");

            newContent.SetValue("fra", nameEncrypted);
            newContent.SetValue("eMail", emailEncrypted);
            newContent.SetValue("besked", messageEncrypted);

            var result = contentService.SaveAndPublishWithStatus(newContent);
            return new HttpStatusCodeResult(HttpStatusCode.OK);
        }
        catch (System.Exception ex)
        {
            Log.Error("Contact Form Error", ex);
            return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
        }

    }

Здесь я пытаюсь расшифровать свой код снова.Это вызывает исключение (System.Security.Cryptography.CryptographicException: «Произошла ошибка во время криптографической операции.»), Когда я вызываю MachineKey.Unprotect (nameDecrypted), и я не могу найти свою ошибку.Я думаю, что это может иметь какое-то отношение к моему кодированию и декодированию?

    private void EditorModelEventManager_SendingContentModel(System.Web.Http.Filters.HttpActionExecutedContext sender, EditorModelEventArgs<Umbraco.Web.Models.ContentEditing.ContentItemDisplay> e)
    {
        var node = e.Model.Properties.ToList();
        if (e.Model.IsChildOfListView && e.Model.ContentTypeAlias == "mails")
        {
            string nameDecrypt = node.Where(x => x.Alias.ToLower() == "fra").Select(x => x.Value).First().ToString();
            Byte[] nameDecrypted = Encoding.ASCII.GetBytes(nameDecrypt);
            var name = e.Model.Properties.FirstOrDefault(x => x.Alias.ToLower() == "fra");
            Byte[] decryptName = MachineKey.Unprotect(nameDecrypted);
            string nameReady = Encoding.ASCII.GetString(decryptName);
            name.Value = $"{nameReady}";
        }
    }
}

}

1 Ответ

0 голосов
/ 18 декабря 2018

Я нашел решение.Вместо использования Encoding.ASCII.GetString () я использовал Convert.FromBase64String ().

...