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

szyfrowanie AES C#

0 głosów
888 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 (354,880 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 (354,880 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 520 wizyt
pytanie zadane 9 października 2021 w Systemy operacyjne, programy przez Ser-Ver Użytkownik (820 p.)
0 głosów
0 odpowiedzi 236 wizyt
pytanie zadane 23 lipca w Python przez CosmoWielki Użytkownik (730 p.)
+1 głos
1 odpowiedź 1,057 wizyt

93,631 zapytań

142,553 odpowiedzi

323,056 komentarzy

63,138 pasjonatów

Advent of Code 2025

Top 15 użytkowników

  1. 2658p. - dia-Chann
  2. 2630p. - DziarnowskiJ
  3. 2550p. - raydeal
  4. 2478p. - rucin93
  5. 2361p. - Łukasz Piwowar
  6. 2340p. - CC PL
  7. 2300p. - Adrian Wieprzkowicz
  8. 2117p. - Łukasz Eckert
  9. 2082p. - Michal Drewniak
  10. 1957p. - Maurycy W
  11. 1885p. - robwarsz
  12. 1811p. - rafalszastok
  13. 1600p. - Rafał Trójniak
  14. 1588p. - Tomasz Bielak
  15. 1494p. - ssynowiec
Szczegóły i pełne wyniki

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

Kursy INF.02 i INF.03
...