-
Notifications
You must be signed in to change notification settings - Fork 6
/
Copy pathPiiAsAes128.cs
41 lines (36 loc) · 1.38 KB
/
PiiAsAes128.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
using System;
using System.Linq;
using System.Security.Cryptography;
using System.Text;
namespace Gaev.Blog.Examples;
public class PiiAsAes128 : IPiiEncoder
{
private readonly string _key;
public PiiAsAes128(string key)
{
_key = key;
}
public string ToSystemString(PiiString piiString)
{
var stringToEncrypt = piiString.ToString();
using var aes = Aes.Create();
aes.Key = Convert.FromBase64String(_key);
aes.GenerateIV();
using var encryptor = aes.CreateEncryptor();
var buffer = Encoding.UTF8.GetBytes(stringToEncrypt);
var encryptedBuffer = encryptor.TransformFinalBlock(buffer, 0, buffer.Length);
return Convert.ToBase64String(aes.IV.Concat(encryptedBuffer).ToArray());
}
public PiiString ToPiiString(string str)
{
var dataToDecrypt = Convert.FromBase64String(str);
using var aes = Aes.Create();
aes.Key = Convert.FromBase64String(_key);
var ivSize = aes.BlockSize / 8;
aes.IV = dataToDecrypt.Take(ivSize).ToArray();
using var decryptor = aes.CreateDecryptor();
var encryptedBuffer = dataToDecrypt.Skip(ivSize).ToArray();
var decryptedBuffer = decryptor.TransformFinalBlock(encryptedBuffer, 0, encryptedBuffer.Length);
return new PiiString(Encoding.UTF8.GetString(decryptedBuffer));
}
}