public byte[] Encrypt(byte[] data, int offset, int length)
{
using (MemoryStream buffer = new MemoryStream(255))
using (BinaryWriter writer = new BinaryWriter(buffer))
{
using (SHA1 sha1 = new SHA1Managed())
{
byte[] hashsum = sha1.ComputeHash(data, offset, length);
writer.Write(hashsum);
}
buffer.Write(data, offset, length);
if (length < 235)
{
byte[] padding = new byte[235 - length];
new Random().NextBytes(padding);
buffer.Write(padding, 0, padding.Length);
}
byte[] ciphertext = new BigInteger(1, buffer.ToArray()).ModPow(e, m).ToByteArrayUnsigned();
if (ciphertext.Length == 256)
{
return ciphertext;
}
else {
byte[] paddedCiphertext = new byte[256];
int padding = 256 - ciphertext.Length;
for (int i = 0; i < padding; i++)
{
paddedCiphertext[i] = 0;
}
ciphertext.CopyTo(paddedCiphertext, padding);
return paddedCiphertext;
}
}
}