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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
|
namespace LibTSforge.Crypto
{
using System;
using System.Linq;
using System.Security.Cryptography;
public static class CryptoUtils
{
public static byte[] GenerateRandomKey(int len)
{
byte[] rand = new byte[len];
Random r = new Random();
r.NextBytes(rand);
return rand;
}
public static byte[] AESEncrypt(byte[] data, byte[] key)
{
using (Aes aes = Aes.Create())
{
aes.Key = key;
aes.Mode = CipherMode.CBC;
aes.Padding = PaddingMode.PKCS7;
ICryptoTransform encryptor = aes.CreateEncryptor(aes.Key, Enumerable.Repeat((byte)0, 16).ToArray());
byte[] encryptedData = encryptor.TransformFinalBlock(data, 0, data.Length);
return encryptedData;
}
}
public static byte[] AESDecrypt(byte[] data, byte[] key)
{
using (Aes aes = Aes.Create())
{
aes.Key = key;
aes.Mode = CipherMode.CBC;
aes.Padding = PaddingMode.PKCS7;
ICryptoTransform decryptor = aes.CreateDecryptor(aes.Key, Enumerable.Repeat((byte)0, 16).ToArray());
byte[] decryptedData = decryptor.TransformFinalBlock(data, 0, data.Length);
return decryptedData;
}
}
public static byte[] RSADecrypt(byte[] rsaKey, byte[] data)
{
using (RSACryptoServiceProvider rsa = new RSACryptoServiceProvider())
{
rsa.ImportCspBlob(rsaKey);
return rsa.Decrypt(data, false);
}
}
public static byte[] RSAEncrypt(byte[] rsaKey, byte[] data)
{
using (RSACryptoServiceProvider rsa = new RSACryptoServiceProvider())
{
rsa.ImportCspBlob(rsaKey);
return rsa.Encrypt(data, false);
}
}
public static byte[] RSASign(byte[] rsaKey, byte[] data)
{
using (RSACryptoServiceProvider rsa = new RSACryptoServiceProvider())
{
rsa.ImportCspBlob(rsaKey);
RSAPKCS1SignatureFormatter formatter = new RSAPKCS1SignatureFormatter(rsa);
formatter.SetHashAlgorithm("SHA1");
byte[] hash;
using (SHA1 sha1 = SHA1.Create())
{
hash = sha1.ComputeHash(data);
}
return formatter.CreateSignature(hash);
}
}
public static bool RSAVerifySignature(byte[] rsaKey, byte[] data, byte[] signature)
{
using (RSACryptoServiceProvider rsa = new RSACryptoServiceProvider())
{
rsa.ImportCspBlob(rsaKey);
RSAPKCS1SignatureDeformatter deformatter = new RSAPKCS1SignatureDeformatter(rsa);
deformatter.SetHashAlgorithm("SHA1");
byte[] hash;
using (SHA1 sha1 = SHA1.Create())
{
hash = sha1.ComputeHash(data);
}
return deformatter.VerifySignature(hash, signature);
}
}
public static byte[] HMACSign(byte[] key, byte[] data)
{
HMACSHA1 hmac = new HMACSHA1(key);
return hmac.ComputeHash(data);
}
public static bool HMACVerify(byte[] key, byte[] data, byte[] signature)
{
return Enumerable.SequenceEqual(signature, HMACSign(key, data));
}
public static byte[] SaltSHASum(byte[] salt, byte[] data)
{
SHA1 sha1 = SHA1.Create();
byte[] sha_data = salt.Concat(data).ToArray();
return sha1.ComputeHash(sha_data);
}
public static bool SaltSHAVerify(byte[] salt, byte[] data, byte[] checksum)
{
return Enumerable.SequenceEqual(checksum, SaltSHASum(salt, data));
}
public static byte[] SHA256Hash(byte[] data)
{
using (SHA256 sha256 = SHA256.Create())
{
return sha256.ComputeHash(data);
}
}
}
}
|