Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using DataTypes;
- namespace CryptoSystem {
- public class CryptoManager {
- private static CryptoManager i;
- public static CryptoManager I {
- get => i ?? (i = new CryptoManager());
- private set => i = value;
- }
- public CryptoManager() {
- if (i != null) throw new Exception("CryptoManager is created");
- i = this;
- }
- /// <summary>
- /// Шифрование массива
- /// </summary>
- /// <param name="data"></param>
- /// <returns></returns>
- public byte[] Encrypt(byte[] data) {
- var segments = SplitArray(data);
- for (var i = 0; i < segments.Length; i++)
- segments[i] = EncryptExternal(segments[i]);
- return CombineArray(segments);
- }
- //Дешифрование массива
- public byte[] Decrypt(byte[] data) {
- var segments = SplitArray(data);
- for (var i = 0; i < segments.Length; i++)
- segments[i] = DecryptExternal(segments[i]);
- return CombineArray(segments);
- }
- /// <summary>
- /// Внений вызов шифрования сегмента
- /// </summary>
- /// <param name="data"></param>
- /// <returns></returns>
- private byte[] EncryptExternal(byte[] data) {
- return data;
- }
- /// <summary>
- /// Внешний вызов дешифрования сегментов
- /// </summary>
- /// <param name="data"></param>
- /// <returns></returns>
- private byte[] DecryptExternal(byte[] data) {
- return data;
- }
- /// <summary>
- /// Разбивает массив на сегменты
- /// </summary>
- /// <param name="data"></param>
- /// <returns></returns>
- private byte[][] SplitArray(byte[] data) {
- var segments = data.Length / PacketData._packetLength;
- if (data.Length - segments * PacketData._packetLength > 0) {
- segments++;
- }
- var arr = new byte[segments][];
- for (int i = 0; i < segments; i++) {
- arr[i] = PacketData.ExtractSubarray(data, i * PacketData._packetLength, PacketData._packetLength);
- }
- return arr;
- }
- /// <summary>
- /// Склеивает сегменты в один массив
- /// </summary>
- /// <param name="data"></param>
- /// <returns></returns>
- private byte[] CombineArray(byte[][] data) {
- var c = 0;
- var result = new byte[data.Length * PacketData._packetLength];
- foreach (var i in data)
- foreach (var j in i)
- result[c] = j;
- return result;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement