Encrypt/Decrypt with ease (Rijndael, TripleDES, DES, RC2) - C#


SUBMITTED BY: emmek

DATE: May 19, 2022, 10:59 p.m.

FORMAT: C#

SIZE: 3.7 kB

HITS: 6383

  1. using System;
  2. using System.Security.Cryptography;
  3. using System.Text;
  4. namespace HackForums.gigajew
  5. {
  6. /// <summary>
  7. /// Created by gigajew@hf
  8. /// </summary>
  9. public sealed class MultiCrypt
  10. {
  11. public string Key
  12. {
  13. get { return Convert.ToBase64String(_key); }
  14. set { _key = Convert.FromBase64String(value); }
  15. }
  16. public string IV
  17. {
  18. get { return Convert.ToBase64String(_iv); }
  19. set { _iv = Convert.FromBase64String(value); }
  20. }
  21. public void GenerateKey(MultiCryptType type)
  22. {
  23. SymmetricAlgorithm symmetricAlgorithm;
  24. using (symmetricAlgorithm = FromMultiCryptType(type))
  25. {
  26. symmetricAlgorithm.GenerateKey();
  27. _key = symmetricAlgorithm.Key;
  28. }
  29. }
  30. public void GenerateIV(MultiCryptType type)
  31. {
  32. SymmetricAlgorithm symmetricAlgorithm;
  33. using (symmetricAlgorithm = FromMultiCryptType(type))
  34. {
  35. symmetricAlgorithm.GenerateIV();
  36. _iv = symmetricAlgorithm.IV;
  37. }
  38. }
  39. public byte[] Encrypt(MultiCryptType type, byte[] data)
  40. {
  41. if (_key == null)
  42. GenerateKey(type);
  43. if (_iv == null)
  44. GenerateIV(type);
  45. SymmetricAlgorithm symmetricAlgorithm;
  46. using (symmetricAlgorithm = FromMultiCryptType(type))
  47. {
  48. symmetricAlgorithm.Key = _key;
  49. symmetricAlgorithm.IV = _iv;
  50. using (ICryptoTransform transformer = symmetricAlgorithm.CreateEncryptor())
  51. {
  52. return transformer.TransformFinalBlock(data, 0, data.Length);
  53. }
  54. }
  55. }
  56. public string Encrypt(MultiCryptType type, string data)
  57. {
  58. return Convert.ToBase64String(Encrypt(type, Encoding.UTF8.GetBytes(data)));
  59. }
  60. public byte[] Decrypt(MultiCryptType type, byte[] data)
  61. {
  62. if (_key == null)
  63. GenerateKey(type);
  64. if (_iv == null)
  65. GenerateIV(type);
  66. SymmetricAlgorithm symmetricAlgorithm;
  67. using (symmetricAlgorithm = FromMultiCryptType(type))
  68. {
  69. symmetricAlgorithm.Key = _key;
  70. symmetricAlgorithm.IV = _iv;
  71. using (ICryptoTransform transformer = symmetricAlgorithm.CreateDecryptor())
  72. {
  73. return transformer.TransformFinalBlock(data, 0, data.Length);
  74. }
  75. }
  76. }
  77. public string Decrypt(MultiCryptType type, string data)
  78. {
  79. return Encoding.UTF8.GetString(Decrypt(type, Convert.FromBase64String(data)));
  80. }
  81. private SymmetricAlgorithm FromMultiCryptType(MultiCryptType type)
  82. {
  83. switch (type)
  84. {
  85. case MultiCryptType.Rijndael:
  86. return RijndaelManaged.Create();
  87. case MultiCryptType.TripleDES:
  88. return TripleDES.Create();
  89. case MultiCryptType.DES:
  90. return DES.Create();
  91. case MultiCryptType.RC2:
  92. return RC2.Create();
  93. default:
  94. return RijndaelManaged.Create();
  95. }
  96. }
  97. private byte[] _key;
  98. private byte[] _iv;
  99. }
  100. public enum MultiCryptType
  101. {
  102. Rijndael, TripleDES, DES, RC2
  103. }
  104. }

comments powered by Disqus