Вы можете использовать класс ProtectedData
, если хотите простое решение:
using System;
using System.Security.Cryptography;
using System.Text;
private void example()
{
string data = "122ujhdheiwe";
// Encrypt
UnicodeEncoding unicodeEncoding = new UnicodeEncoding();
byte[] secret = ProtectedData.Protect(unicodeEncoding.GetBytes(data), null, DataProtectionScope.CurrentUser);
Console.WriteLine(BitConverter.ToString(secret));
// If you need it as a printable string, you can convert the binary to Base64
string base64 = Convert.ToBase64String(secret);
Console.WriteLine(base64);
// Back to binary...
byte[] backagain = Convert.FromBase64String(base64);
// Decrypt
byte[] clearbytes = ProtectedData.Unprotect(backagain, null, DataProtectionScope.CurrentUser);
string roundtripped = unicodeEncoding.GetString(clearbytes);
Console.WriteLine(roundtripped);
}
ср. ProtectedDataClass
Если вы хотите, чтобы зашифрованные данные выглядели почти так же, как ваши исходные данные, как в примере в вашем вопросе (122ujhdheiwe ==> uoi8asdf8asdf), то вы ищетесохраняющее формат шифрование - ср.здесь , для которого у меня нет примера.
РЕДАКТИРОВАТЬ: я просто заметил, что в своем вопросе вы пишете, что вы хотите иметь возможность снова зашифровать ту же строку и получить тот же зашифрованный результат, в этом случае ProtectedData не будет работать, потому что ключ, используемый в шифровании, со временем изменится.