Is there any way to improve the speed in my script??
Thanks in advance, appreciate any help.
Thanks in advance, appreciate any help.
C#:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Security.Cryptography;
using System.Text;
using System.Threading.Tasks;
namespace MegaTool
{
public static class mega
{
private static readonly Rijndael RijndaelCbc;
private static readonly byte[] DefaultIv = new byte[16];
static mega()
{
RijndaelCbc = Rijndael.Create();
RijndaelCbc.Padding = PaddingMode.None;
RijndaelCbc.Mode = CipherMode.CBC;
}
public static byte[] ToBytes(this string data)
{
return Encoding.UTF8.GetBytes(data);
}
public static byte[] PrepareKey(byte[] data)
{
byte[] pkey = new byte[] { 0x93, 0xC4, 0x67, 0xE3, 0x7D, 0xB0, 0xC7, 0xA4, 0xD1, 0xBE, 0x3F, 0x81, 0x01, 0x52, 0xCB, 0x56 };
for (int it = 0; it < 65536; it++)
{
for (int idx = 0; idx < data.Length; idx += 16)
{
byte[] key = data.CopySubArray(16, idx);
pkey = EncryptAes(pkey, key);
}
}
return pkey;
}
public static byte[] EncryptAes(byte[] data, byte[] key)
{
using (ICryptoTransform encryptor = RijndaelCbc.CreateEncryptor(key, DefaultIv))
{
return encryptor.TransformFinalBlock(data, 0, data.Length);
}
}
public static T[] CopySubArray<T>(this T[] source, int length, int offset = 0)
{
T[] result = new T[length];
while (--length >= 0)
{
if (source.Length > offset + length)
{
result[length] = source[offset + length];
}
}
return result;
}
public static string GenerateHash(string email, byte[] passwordAesKey)
{
byte[] emailBytes = email.ToBytes();
byte[] hash = new byte[16];
for (int i = 0; i < emailBytes.Length; i++)
{
hash[i % 16] ^= emailBytes[i];
}
for (int it = 0; it < 16384; it++)
{
hash = EncryptAes(hash, passwordAesKey);
}
byte[] result = new byte[8];
Array.Copy(hash, 0, result, 0, 4);
Array.Copy(hash, 8, result, 4, 4);
return result.ToBase64();
}
public static string ToBase64(this byte[] data)
{
StringBuilder sb = new StringBuilder();
sb.Append(Convert.ToBase64String(data));
sb.Replace('+', '-');
sb.Replace('/', '_');
sb.Replace("=", string.Empty);
return sb.ToString();
}
}
}