Следующий класс имеет шифрования и дешифрования процесс, с помощью которого можно зашифровать или расшифровать свои данные с предоставлением некоторых значений, т.е.
Ключ = строка/байт [], чтобы зашифровать или расшифровать вход
Input = требуемое поле пользователя, на котором он хочет применить криптография
Пожалуйста, напишите этот класс следующим образом:
namespace SomeNameSpace
{
public enum CryptType { ENCRYPT, DECRYPT }
public enum CryptTechnique { AES, RC2, RIJ, DES, TDES }
public class Cryptography
{
public object Crypt(CryptType EncryptOrDecrypt, CryptTechnique CryptographicTechnique, object Input, string Key)
{
try
{
SymmetricAlgorithm SymAlgo; //This class is parent of all classes in CryptTechnique enums
switch (CryptographicTechnique)
{
case CryptTechnique.AES:
SymAlgo = new AesManaged();
break;
case CryptTechnique.RC2:
SymAlgo = new RC2CryptoServiceProvider();
break;
case CryptTechnique.RIJ:
SymAlgo = new RijndaelManaged();
break;
case CryptTechnique.DES:
SymAlgo = new DESCryptoServiceProvider();
break;
case CryptTechnique.TDES:
SymAlgo = new TripleDESCryptoServiceProvider();
break;
default:
return false;
}
SymAlgo.Key = UTF8Encoding.UTF8.GetBytes(Key);
SymAlgo.Padding = PaddingMode.PKCS7;
SymAlgo.Mode = CipherMode.ECB;
ICryptoTransform ICT = null;
byte[] resultArray;
if(EncryptOrDecrypt == CryptType.ENCRYPT)
{
ICT = SymAlgo.CreateEncryptor();
}
else if(EncryptOrDecrypt == CryptType.DECRYPT)
{
ICT = SymAlgo.CreateDecryptor();
}
if (Input is string)
{
byte[] inputArray = UTF8Encoding.UTF8.GetBytes(Input as string);
resultArray = ICT.TransformFinalBlock(inputArray, 0, inputArray.Length);
SymAlgo.Clear();
return Convert.ToBase64String(resultArray, 0, resultArray.Length);
}
else if (Input is byte[])
{
resultArray = ICT.TransformFinalBlock(Input as byte[], 0, (Input as byte[]).Length);
SymAlgo.Clear();
return resultArray;
}
return false;
}catch(Exception ex)
{
return ex.Message;
}
}
}
}
и в какой-то контроллер, где вы хотите зашифровать или расшифровать данные, написать там как
public ActionResult SomeAction()
{
string Key = "1234567890abcdef"; //key must have 16 chars, other wise you may get error "key size in not valid".
Password = "Secret";
Cryptography Crypt = new Cryptography();
EncryptedPassword = (string)Crypt.Crypt(CryptType.ENCRYPT, CryptTechnique.RIJ, Password, Key);
}
Здесь вы получите зашифрованный пароль в переменной EncryptedPassword
Возможный дубликат [Как предотвратить управляемом DLL из реинжиниринга C#] (http://stackoverflow.com/questions/3490887/how-do-i-prevent-managed-dll-from-reverse-engineering-c-sharp) – Liam
@ Liam, но даже если я предотвращу повторное проектирование .dll токен сохраняется и будет просматриваться изнутри VS .. поэтому захотите его зашифровать, поэтому он будет защищен всеми способами –
Токен, который не должен уходить в код, вместо этого он должен быть частью конфигурации который живет в окружающей среды процесса. Соответствующая цитата: «Тест лакмусовой бумажки на то, что приложение имеет всю конфигурацию, правильно учтенную из кода, заключается в том, может ли кодовая база быть открыта с открытым исходным кодом в любой момент без ущерба для каких-либо учетных данных». (от http://12factor.net/config) –