Например, вы можете зашифровать id
+, добавив к нему немного хеша.Таким образом, пользователь не может просто изменить его.
Или вы можете просто зашифровать свой id
с помощью симметричного шифра, например AES
или DES
.Результат id
будет длиннее (потому что они работают в блоках по 64-256 бит), и было бы невозможно изменить случайный символ и получить действительный id
(технически с достаточным количеством попыток можно было бы сделать это).. Удачи!)
Пример кода
// Generate key. You do it once and save the key in the web.config or in the code
var encryptorForGenerateKey = Aes.Create();
encryptorForGenerateKey.BlockSize = 128;
encryptorForGenerateKey.KeySize = 128;
encryptorForGenerateKey.GenerateKey();
encryptorForGenerateKey.GenerateIV();
var key = encryptorForGenerateKey.Key;
var iv = encryptorForGenerateKey.IV;
// Encrypt
var encryptor = Aes.Create();
var encryptorTransformer = encryptorForGenerateKey.CreateEncryptor(key, iv);
int id = 123;
var bytes = BitConverter.GetBytes(id);
var encrypted = encryptorTransformer.TransformFinalBlock(bytes, 0, bytes.Length);
var encryptedString = BitConverter.ToString(encrypted);
Console.WriteLine(encryptedString);
// Decrypt
var decryptor = Aes.Create();
var decryptorTransformer = decryptor.CreateDecryptor(key, iv);
String[] arr = encryptedString.Split('-');
byte[] encrypted2 = new byte[arr.Length];
for (int i = 0; i < arr.Length; i++)
{
encrypted2[i] = Convert.ToByte(arr[i], 16);
}
// If the block is irregular there is the possibility TransformFinalBlock will throw
var result = decryptorTransformer.TransformFinalBlock(encrypted2, 0, encrypted2.Length);
if (result.Length != sizeof(int))
{
throw new Exception();
}
var id2 = BitConverter.ToInt32(result, 0);
для id
= 123
у нас есть закодированный id
= 4E-CD-80-9E-7E-FB-A7-B9-74-B6-3A-37-57-9C-BD-A9
.Я мог бы сделать его короче, используя Base64 или удалив -
, но во втором случае код был бы немного сложнее.Без -
: D2B4F51E6577967A2262E3AE51F3EC74
, в Base64: 0rT1HmV3lnoiYuOuUfPsdA==
Учитывая ваше использование, вероятно, DES
достаточно безопасен.С DES id
будет:
F2-54-4B-CE-23-83-96-C2 // With -
F2544BCE238396C2 // Without -
8lRLziODlsI= // Base64
. Чтобы использовать DES, измените все Aes
на DES
и удалите строки BlockSize
и KeySize
.