Einzelnen Beitrag anzeigen

Aviator

Registriert seit: 3. Jun 2010
1.610 Beiträge
 
Delphi 10.3 Rio
 
#26

AW: DEC6.0 Verständnisfrage AES Ver-/Entschlüsselung

  Alt 15. Feb 2021, 22:04
Meine Frage wäre, was C# da an einfacher zu verwendende Methoden bietet?
In Punkto Kryptographie oder in Punkto String vs. Byte Arrays etc. und deren Umwandlung?
Naja es ist wohl eher eine subjektive Wahrnehmung. Man kann sich jetzt über die Syntax streiten. Teilweise kommen mir die Dinge eben einfacher vor was die Schreibweise und die Nutzung angeht. Es kann aber evtl. auch einfach daran liegen, dass die Codevervollständigung in VS deutlich besser ist als bei Delphi und man dadurch "leichter" ans Ziel kommt.

Meine Delphi Klasse habe ich analog meiner C# Klasse aufgebaut. Im Endeffekt erkennt man alles irgendwie wieder.

Code:
using System.IO;
using System.Linq;
using System.Security.Cryptography;
using WAC.Business.Interfaces;

namespace WAC.Business.Encryption
{
    public class AES : IAES
    {
        private readonly IAesKeyReader aesKeyReader;

        public AES(IAesKeyReader aesKeyReader)
        {
            this.aesKeyReader = aesKeyReader;
        }

        public byte[] Encrypt(string plainText)
        {
            using (AesManaged aes = new AesManaged())
            {
                return Encrypt(plainText, aes.IV);
            }
        }

        public string Decrypt(byte[] cipherText)
        {
            string plaintext = null;
            // Create AesManaged
            using (AesManaged aes = new AesManaged())
            {
                // Create the streams used for decryption.
                using (MemoryStream ms = new MemoryStream(cipherText))
                {
                    byte[] iv = new byte[16];
                    ms.Read(iv, 0, 16);

                    // Create a decryptor
                    ICryptoTransform decryptor = aes.CreateDecryptor(aesKeyReader.GetAesKey(), iv);

                    // Create crypto stream
                    using (CryptoStream cs = new CryptoStream(ms, decryptor, CryptoStreamMode.Read))
                    {
                        // Read crypto stream
                        using (StreamReader reader = new StreamReader(cs))
                            plaintext = reader.ReadToEnd();
                    }
                }
            }

            return plaintext;
        }

        public byte[] Encrypt(string plainText, byte[] iv)
        {
            byte[] encrypted;
            // Create a new AesManaged.
            using (AesManaged aes = new AesManaged())
            {
                // Create encryptor
                ICryptoTransform encryptor = aes.CreateEncryptor(aesKeyReader.GetAesKey(), iv);
                // Create MemoryStream
                using (MemoryStream ms = new MemoryStream())
                {
                    // Create crypto stream using the CryptoStream class. This class is the key to encryption
                    // and encrypts and decrypts data from any given stream. In this case, we will pass a memory stream
                    // to encrypt
                    using (CryptoStream cs = new CryptoStream(ms, encryptor, CryptoStreamMode.Write))
                    {
                        // Create StreamWriter and write data to a stream
                        using (StreamWriter sw = new StreamWriter(cs))
                            sw.Write(plainText);
                        encrypted = iv.Concat(ms.ToArray()).ToArray();
                    }
                }
            }
            // Return encrypted data
            return encrypted;
        }
    }
}
  Mit Zitat antworten Zitat