Advertisement
KpoKec

CryptoManager

Apr 19th, 2019
196
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 2.91 KB | None | 0 0
  1. using System;
  2. using DataTypes;
  3.  
  4. namespace CryptoSystem {
  5.     public class CryptoManager {
  6.         private static CryptoManager i;
  7.  
  8.         public static CryptoManager I {
  9.             get => i ?? (i = new CryptoManager());
  10.             private set => i = value;
  11.         }
  12.  
  13.         public CryptoManager() {
  14.             if (i != null) throw new Exception("CryptoManager is created");
  15.             i = this;
  16.         }
  17.  
  18.         /// <summary>
  19.         /// Шифрование массива
  20.         /// </summary>
  21.         /// <param name="data"></param>
  22.         /// <returns></returns>
  23.         public byte[] Encrypt(byte[] data) {
  24.             var segments = SplitArray(data);
  25.             for (var i = 0; i < segments.Length; i++)
  26.                 segments[i] = EncryptExternal(segments[i]);
  27.             return CombineArray(segments);
  28.         }
  29.  
  30.         //Дешифрование массива
  31.         public byte[] Decrypt(byte[] data) {
  32.             var segments = SplitArray(data);
  33.             for (var i = 0; i < segments.Length; i++)
  34.                 segments[i] = DecryptExternal(segments[i]);
  35.             return CombineArray(segments);
  36.         }
  37.  
  38.         /// <summary>
  39.         /// Внений вызов шифрования сегмента
  40.         /// </summary>
  41.         /// <param name="data"></param>
  42.         /// <returns></returns>
  43.         private byte[] EncryptExternal(byte[] data) {
  44.             return data;
  45.         }
  46.  
  47.         /// <summary>
  48.         /// Внешний вызов дешифрования сегментов
  49.         /// </summary>
  50.         /// <param name="data"></param>
  51.         /// <returns></returns>
  52.         private byte[] DecryptExternal(byte[] data) {
  53.             return data;
  54.         }
  55.  
  56.         /// <summary>
  57.         /// Разбивает массив на сегменты
  58.         /// </summary>
  59.         /// <param name="data"></param>
  60.         /// <returns></returns>
  61.         private byte[][] SplitArray(byte[] data) {
  62.             var segments = data.Length / PacketData._packetLength;
  63.             if (data.Length - segments * PacketData._packetLength > 0) {
  64.                 segments++;
  65.             }
  66.  
  67.             var arr = new byte[segments][];
  68.             for (int i = 0; i < segments; i++) {
  69.                 arr[i] = PacketData.ExtractSubarray(data, i * PacketData._packetLength, PacketData._packetLength);
  70.             }
  71.  
  72.             return arr;
  73.         }
  74.  
  75.         /// <summary>
  76.         /// Склеивает сегменты в один массив
  77.         /// </summary>
  78.         /// <param name="data"></param>
  79.         /// <returns></returns>
  80.         private byte[] CombineArray(byte[][] data) {
  81.             var c      = 0;
  82.             var result = new byte[data.Length * PacketData._packetLength];
  83.             foreach (var i in data)
  84.                 foreach (var j in i)
  85.                     result[c] = j;
  86.             return result;
  87.         }
  88.     }
  89. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement