Шифрование AES, пример кода - PullRequest
0 голосов
/ 05 ноября 2008

Как мне выполнить шифрование AES по GUID?

На клиентском компьютере мы будем хранить GUID и их открытый ключ, а наши внутренние серверы будут иметь закрытый ключ и их guid.

Это все необходимые входные данные для генерации шифрования AES?

Ответы [ 3 ]

8 голосов
/ 05 ноября 2008

AES - алгоритм симметричного шифрования (ключ шифрования и дешифрования одинаков). Если вы говорите об открытых и закрытых ключах, вам нужен алгоритм асимметричного шифрования , такой как RSA.

1 голос
/ 05 ноября 2008

Вы можете зашифровать все, что может быть представлено в виде потока байтов. Единственный ингредиент, отсутствующий в «рецепте» в вашем вопросе, это ключ шифрования:

void encrypt(char *plaintext, char *key, char *crypt)
{
  // Encrypt plaintext with the key, returning the result in crypt.

}

Примечания:

  • Используя PKI (открытый / закрытый ключи), каждый участник обычно хранит свой собственный закрытый ключ в защищенном виде и свободно распространяет свой открытый ключ. Сообщения шифруются с использованием открытого ключа получателя и расшифровываются каждым получателем с помощью личного ключа. Из формулировки вопроса не очевидно, что вы используете эту модель.

  • Джесси дает хороший пример для демонстрационных целей. Просто помните, что вы, вероятно, не хотите жестко кодировать ключи в своем производственном приложении ..

0 голосов
/ 05 ноября 2008

Вот быстрое шифрование / дешифрование строковых данных с использованием AES (Rijndael):

private static readonly byte[] rgbKey = Encoding.UTF8.GetBytes("Ni=9OE=$i+62eprIuDr@ewOu5I9r34Ro"); // change to your own secure key

private static readonly byte[] rgbIv = Encoding.UTF8.GetBytes("to$eO_e!maI*o3ut"); // change to your own secure initialization vector

public static string Encrypt(string originalString)
{
    if (string.IsNullOrEmpty(originalString))
    {
        throw new ArgumentNullException(
           "originalString",
           "The string which needs to be encrypted can not be null.");
    }

    using (var cryptoProvider = new RijndaelManaged())
    using (var memoryStream = new MemoryStream())
    using (var encryptor = cryptoProvider.CreateEncryptor(rgbKey, rgbIv))
    using (var cryptoStream = new CryptoStream(memoryStream, encryptor, CryptoStreamMode.Write))
    using (var writer = new StreamWriter(cryptoStream))
    {
        writer.Write(originalString);
        writer.Flush();
        cryptoStream.FlushFinalBlock();
        writer.Flush();
        return Convert.ToBase64String(memoryStream.GetBuffer(), 0, (int)memoryStream.Length);
    }
}

public static string Decrypt(string encryptedString)
{
    if (string.IsNullOrEmpty(encryptedString))
    {
        throw new ArgumentNullException(
           "encryptedString",
           "The string which needs to be decrypted can not be null.");
    }

    using (var cryptoProvider = new RijndaelManaged())
    using (var memoryStream = new MemoryStream(Convert.FromBase64String(encryptedString)))
    using (var decryptor = cryptoProvider.CreateDecryptor(rgbKey, rgbIv))
    using (var cryptoStream = new CryptoStream(memoryStream, decryptor, CryptoStreamMode.Read))
    using (var reader = new StreamReader(cryptoStream))
    {
        return reader.ReadToEnd();
    }
}
...