常见加密方式:
RSA加密:
public static byte[] RSAEncrypt(string xmlPublicKey, byte[] SourceBytes)
{
using (RSACryptoServiceProvider RSACryptography = new RSACryptoServiceProvider())
{
RSACryptography.FromXmlString(xmlPublicKey);
int MaxBlockSize = RSACryptography.KeySize / 8 - 11; //加密块最大长度限制
if (SourceBytes.Length <= MaxBlockSize)
return RSACryptography.Encrypt(SourceBytes, false);
using (MemoryStream PlaiStream = new MemoryStream(SourceBytes))
using (MemoryStream CrypStream = new MemoryStream())
{
Byte[] Buffer = new Byte[MaxBlockSize];
int BlockSize = PlaiStream.Read(Buffer, 0, MaxBlockSize);
while (BlockSize > 0)
{
Byte[] ToEncrypt = new Byte[BlockSize];
Array.Copy(Buffer, 0, ToEncrypt, 0, BlockSize);
Byte[] Cryptograph = RSACryptography.Encrypt(ToEncrypt, false);
CrypStream.Write(Cryptograph, 0, Cryptograph.Length);
BlockSize = PlaiStream.Read(Buffer, 0, MaxBlockSize);
}
return CrypStream.ToArray();
}
}
}
RSA解密:
public static byte[] RSADecrypt(string xmlPrivateKey, byte[] EncryptedBytes)
{
using (RSACryptoServiceProvider RSACryptography = new RSACryptoServiceProvider())
{
RSACryptography.FromXmlString(xmlPrivateKey);
int MaxBlockSize = RSACryptography.KeySize / 8; //解密块最大长度限制
if (EncryptedBytes.Length <= MaxBlockSize)
return RSACryptography.Decrypt(EncryptedBytes, false);
using (MemoryStream CrypStream = new MemoryStream(EncryptedBytes))
using (MemoryStream PlaiStream = new MemoryStream())
{
Byte[] Buffer = new Byte[MaxBlockSize];
int BlockSize = CrypStream.Read(Buffer, 0, MaxBlockSize);
while (BlockSize > 0)
{
Byte[] ToDecrypt = new Byte[BlockSize];
Array.Copy(Buffer, 0, ToDecrypt, 0, BlockSize);
Byte[] Plaintext = RSACryptography.Decrypt(ToDecrypt, false);
PlaiStream.Write(Plaintext, 0, Plaintext.Length);
BlockSize = CrypStream.Read(Buffer, 0, MaxBlockSize);
}
return PlaiStream.ToArray();
}
}
}