• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

szyfrowanie AES C#

Aruba Cloud - Virtual Private Server VPS
0 głosów
741 wizyt
pytanie zadane 7 września 2019 w C# przez Magikarp Początkujący (260 p.)
edycja 7 września 2019 przez Magikarp

Dobry wieczór,

Utknąłem z kodem AES'a, zerknie ktoś świeżym okiem?

public class AesEncryptor : IDisposable
{
    public string Get(string key, string plainText)
    {
        plainText = "XPlain"; // debug
        key = "E546C8DF278CD5931069B522E695D4F2"; // debug
        _aes = Aes.Create();
        _aes.IV = Encoding.UTF8.GetBytes("33d6f2726f744392"); // debug
        _transform = _aes.CreateEncryptor(
            rgbKey: Encoding.UTF8.GetBytes(key),
            rgbIV: _aes.IV);
        _memory = new MemoryStream();
        _crypto = new CryptoStream(
            stream: _memory,
            transform: _transform,
            mode: CryptoStreamMode.Write);
        _streamWriter = new StreamWriter(stream: _crypto);
        _streamWriter.Write(plainText);
        var content = Merge(_aes.IV, _memory.ToArray());
        return Convert.ToBase64String(content.ToArray());
    }

    private IEnumerable<T> Merge<T>(params T[][] arrays)
    {
        var merged = arrays.SelectMany(arr => arr);
        foreach (var t in merged)
            yield return t;
    }

    public void Dispose()
    {
        _streamWriter.Dispose();
        _crypto.Dispose();
        _memory.Dispose();
        _transform.Dispose();
        _aes.Dispose();
        GC.SuppressFinalize(this);
    }

    ~AesEncryptor()
    {
        Dispose();
    }

    private Aes _aes;
    private MemoryStream _memory;
    private CryptoStream _crypto;
    private StreamWriter _streamWriter;
    private ICryptoTransform _transform;
}

Przy debugowaniu _aes.CreateEncryptor nie zawiera żadnej informacji o key'u. A metoda zwraca tylko 16-bajtowy kod nieuwzględniający szyfrowanego tekstu.

Projekt .NET Core 2.2.6

Pozdrawiam,

AM

1 odpowiedź

+1 głos
odpowiedź 7 września 2019 przez adrian17 Mentor (352,580 p.)
wybrane 8 września 2019 przez Magikarp
 
Najlepsza

Jak to zamienisz na normalny łańcuch using() ze zmiennymi lokalnymi, to powinno zadziałać (to znaczy: zamieniłem na using i działa), bo bez tego bufory strumieni nie są flushowane gdy być powinny.

Patrz oficjalne przykłady na https://docs.microsoft.com/en-us/dotnet/api/system.security.cryptography.aes?view=netframework-4.8

komentarz 7 września 2019 przez Magikarp Początkujący (260 p.)
ok, ale jeżeli chciałbym nie używać using to w którym momęcię trzeba zrobić flusha?
1
komentarz 7 września 2019 przez adrian17 Mentor (352,580 p.)
Co najmniej na strumieniach po skończeniu pisania.

Natomiast podtrzymuję że to jak to teraz napisałeś, wygląda dla mnie dość źle i niepotrzebnie.

Podobne pytania

+1 głos
0 odpowiedzi 411 wizyt
pytanie zadane 9 października 2021 w Systemy operacyjne, programy przez Ser-Ver Użytkownik (820 p.)
+1 głos
1 odpowiedź 821 wizyt
+2 głosów
1 odpowiedź 437 wizyt
pytanie zadane 22 stycznia 2021 w Bezpieczeństwo, hacking przez pvalue Dyskutant (8,720 p.)

93,335 zapytań

142,330 odpowiedzi

322,411 komentarzy

62,670 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Wprowadzenie do ITsec, tom 1 Wprowadzenie do ITsec, tom 2

Można już zamawiać dwa tomy książek o ITsec pt. "Wprowadzenie do bezpieczeństwa IT" - mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy aż 15% zniżki! Dziękujemy ekipie Sekuraka za fajny rabat dla naszej Społeczności!

...