C custom RSA encryption and decryption and RSA signature and validation class instances


This article describes C# custom RSA encryption and decryption, as well as RSA signature and validation classes. Share with you for your reference. The specific analysis is as follows:

This C# class customizes RSA encryption, decryption, and RSA signature and validation. It contains functions required for RSA encryption, decryption, and signature, with detailed comments.

using System;
using System.Text;
using System.Security.Cryptography;
namespace DotNet.Utilities
{
 /// <summary>
 /// RSA Encryption Decryption and RSA Signing and Validation
 /// </summary>
 public class RSACryption
 {
  public RSACryption()
  {
  }

  #region RSA  Encryption to decrypt
  #region RSA  Key generation of

  /// <summary>
  /// RSA  Key generation of   Generate the private key   And the public key
  /// </summary>
  /// <param name="xmlKeys"></param>
  /// <param name="xmlPublicKey"></param>
  public void RSAKey(out string xmlKeys,out string xmlPublicKey)
  {
    System.Security.Cryptography.RSACryptoServiceProvider rsa=new RSACryptoServiceProvider();
    xmlKeys=rsa.ToXmlString(true);
    xmlPublicKey = rsa.ToXmlString(false);
  }
  #endregion
  #region RSA Encryption function of
  //##############################################################################
  //RSA  Way of encryption
  // instructions KEY It must be XML The line of , The return is a string
  // Where there is 1 Point need to explain!! The encryption mode has   The length of the   Restricted!!
  //##############################################################################
  //RSA Encryption function of  string
  public string RSAEncrypt(string xmlPublicKey,string m_strEncryptString )
  {

   byte[] PlainTextBArray;
   byte[] CypherTextBArray;
   string Result;
   RSACryptoServiceProvider rsa=new RSACryptoServiceProvider();
   rsa.FromXmlString(xmlPublicKey);
   PlainTextBArray = (new UnicodeEncoding()).GetBytes(m_strEncryptString);
   CypherTextBArray = rsa.Encrypt(PlainTextBArray, false);
   Result=Convert.ToBase64String(CypherTextBArray);
   return Result;

  }
  //RSA Encryption function of  byte[]
  public string RSAEncrypt(string xmlPublicKey,byte[] EncryptString )
  {

   byte[] CypherTextBArray;
   string Result;
   RSACryptoServiceProvider rsa=new RSACryptoServiceProvider();
   rsa.FromXmlString(xmlPublicKey);
   CypherTextBArray = rsa.Encrypt(EncryptString, false);
   Result=Convert.ToBase64String(CypherTextBArray);
   return Result;

  }
  #endregion
  #region RSA The decryption function of
  //RSA The decryption function of  string
  public string RSADecrypt(string xmlPrivateKey, string m_strDecryptString )
  {
   byte[] PlainTextBArray;
   byte[] DypherTextBArray;
   string Result;
   System.Security.Cryptography.RSACryptoServiceProvider rsa=new RSACryptoServiceProvider();
   rsa.FromXmlString(xmlPrivateKey);
   PlainTextBArray =Convert.FromBase64String(m_strDecryptString);
   DypherTextBArray=rsa.Decrypt(PlainTextBArray, false);
   Result=(new UnicodeEncoding()).GetString(DypherTextBArray);
   return Result;

  }
  //RSA The decryption function of  byte
  public string RSADecrypt(string xmlPrivateKey, byte[] DecryptString )
  {
   byte[] DypherTextBArray;
   string Result;
   System.Security.Cryptography.RSACryptoServiceProvider rsa=new RSACryptoServiceProvider();
   rsa.FromXmlString(xmlPrivateKey);
   DypherTextBArray=rsa.Decrypt(DecryptString, false);
   Result=(new UnicodeEncoding()).GetString(DypherTextBArray);
   return Result;

  }
  #endregion
  #endregion
  #region RSA A digital signature
  #region  To obtain Hash Description table
  // To obtain Hash Description table   . sharejs.com
  public bool GetHash(string m_strSource, ref byte[] HashData)
  {
   // Get it from a string Hash describe
   byte[] Buffer;
   System.Security.Cryptography.HashAlgorithm MD5 = System.Security.Cryptography.HashAlgorithm.Create("MD5");
   Buffer = System.Text.Encoding.GetEncoding("GB2312").GetBytes(m_strSource);
   HashData = MD5.ComputeHash(Buffer);
   return true;
  }
  // To obtain Hash Description table
  public bool GetHash(string m_strSource, ref string strHashData)
  {

   // Get it from a string Hash describe
   byte[] Buffer;
   byte[] HashData;
   System.Security.Cryptography.HashAlgorithm MD5 = System.Security.Cryptography.HashAlgorithm.Create("MD5");
   Buffer = System.Text.Encoding.GetEncoding("GB2312").GetBytes(m_strSource);
   HashData = MD5.ComputeHash(Buffer);
   strHashData = Convert.ToBase64String(HashData);
   return true;

  }
  // To obtain Hash Description table
  public bool GetHash(System.IO.FileStream objFile, ref byte[] HashData)
  {

   // Get it from the file Hash describe
   System.Security.Cryptography.HashAlgorithm MD5 = System.Security.Cryptography.HashAlgorithm.Create("MD5");
   HashData = MD5.ComputeHash(objFile);
   objFile.Close();
   return true;

  }
  // To obtain Hash Description table
  public bool GetHash(System.IO.FileStream objFile, ref string strHashData)
  {

   // Get it from the file Hash describe
   byte[] HashData;
   System.Security.Cryptography.HashAlgorithm MD5 = System.Security.Cryptography.HashAlgorithm.Create("MD5");
   HashData = MD5.ComputeHash(objFile);
   objFile.Close();
   strHashData = Convert.ToBase64String(HashData);
   return true;

  }
  #endregion
  #region RSA The signature
  //RSA The signature
  public bool SignatureFormatter(string p_strKeyPrivate, byte[] HashbyteSignature, ref byte[] EncryptedSignatureData)
  {

    System.Security.Cryptography.RSACryptoServiceProvider RSA = new System.Security.Cryptography.RSACryptoServiceProvider();
    RSA.FromXmlString(p_strKeyPrivate);
    System.Security.Cryptography.RSAPKCS1SignatureFormatter RSAFormatter = new System.Security.Cryptography.RSAPKCS1SignatureFormatter(RSA);
    // The algorithm for setting the signature is MD5
    RSAFormatter.SetHashAlgorithm("MD5");
    // Perform the signature
    EncryptedSignatureData = RSAFormatter.CreateSignature(HashbyteSignature);
    return true;

  }
  //RSA The signature
  public bool SignatureFormatter(string p_strKeyPrivate, byte[] HashbyteSignature, ref string m_strEncryptedSignatureData)
  {

    byte[] EncryptedSignatureData;
    System.Security.Cryptography.RSACryptoServiceProvider RSA = new System.Security.Cryptography.RSACryptoServiceProvider();
    RSA.FromXmlString(p_strKeyPrivate);
    System.Security.Cryptography.RSAPKCS1SignatureFormatter RSAFormatter = new System.Security.Cryptography.RSAPKCS1SignatureFormatter(RSA);
    // The algorithm for setting the signature is MD5
    RSAFormatter.SetHashAlgorithm("MD5");
    // Perform the signature
    EncryptedSignatureData = RSAFormatter.CreateSignature(HashbyteSignature);
    m_strEncryptedSignatureData = Convert.ToBase64String(EncryptedSignatureData);
    return true;

  }
  //RSA The signature
  public bool SignatureFormatter(string p_strKeyPrivate, string m_strHashbyteSignature, ref byte[] EncryptedSignatureData)
  {

    byte[] HashbyteSignature;
    HashbyteSignature = Convert.FromBase64String(m_strHashbyteSignature);
    System.Security.Cryptography.RSACryptoServiceProvider RSA = new System.Security.Cryptography.RSACryptoServiceProvider();
    RSA.FromXmlString(p_strKeyPrivate);
    System.Security.Cryptography.RSAPKCS1SignatureFormatter RSAFormatter = new System.Security.Cryptography.RSAPKCS1SignatureFormatter(RSA);
    // The algorithm for setting the signature is MD5
    RSAFormatter.SetHashAlgorithm("MD5");
    // Perform the signature
    EncryptedSignatureData = RSAFormatter.CreateSignature(HashbyteSignature);
    return true;

  }
  //RSA The signature
  public bool SignatureFormatter(string p_strKeyPrivate, string m_strHashbyteSignature, ref string m_strEncryptedSignatureData)
  {

    byte[] HashbyteSignature;
    byte[] EncryptedSignatureData;
    HashbyteSignature = Convert.FromBase64String(m_strHashbyteSignature);
    System.Security.Cryptography.RSACryptoServiceProvider RSA = new System.Security.Cryptography.RSACryptoServiceProvider();
    RSA.FromXmlString(p_strKeyPrivate);
    System.Security.Cryptography.RSAPKCS1SignatureFormatter RSAFormatter = new System.Security.Cryptography.RSAPKCS1SignatureFormatter(RSA);
    // The algorithm for setting the signature is MD5
    RSAFormatter.SetHashAlgorithm("MD5");
    // Perform the signature
    EncryptedSignatureData = RSAFormatter.CreateSignature(HashbyteSignature);
    m_strEncryptedSignatureData = Convert.ToBase64String(EncryptedSignatureData);
    return true;

  }
  #endregion
  #region RSA  Signature verification
  public bool SignatureDeformatter(string p_strKeyPublic, byte[] HashbyteDeformatter, byte[] DeformatterData)
  {

    System.Security.Cryptography.RSACryptoServiceProvider RSA = new System.Security.Cryptography.RSACryptoServiceProvider();
    RSA.FromXmlString(p_strKeyPublic);
    System.Security.Cryptography.RSAPKCS1SignatureDeformatter RSADeformatter = new System.Security.Cryptography.RSAPKCS1SignatureDeformatter(RSA);
    // When specifying decryption HASH Algorithm for MD5
    RSADeformatter.SetHashAlgorithm("MD5");
    if(RSADeformatter.VerifySignature(HashbyteDeformatter,DeformatterData))
    {
     return true;
    }
    else
    {
     return false;
    }

  }
  public bool SignatureDeformatter(string p_strKeyPublic, string p_strHashbyteDeformatter, byte[] DeformatterData)
  {

    byte[] HashbyteDeformatter;
    HashbyteDeformatter = Convert.FromBase64String(p_strHashbyteDeformatter);
    System.Security.Cryptography.RSACryptoServiceProvider RSA = new System.Security.Cryptography.RSACryptoServiceProvider();
    RSA.FromXmlString(p_strKeyPublic);
    System.Security.Cryptography.RSAPKCS1SignatureDeformatter RSADeformatter = new System.Security.Cryptography.RSAPKCS1SignatureDeformatter(RSA);
    // When specifying decryption HASH Algorithm for MD5
    RSADeformatter.SetHashAlgorithm("MD5");
    if(RSADeformatter.VerifySignature(HashbyteDeformatter,DeformatterData))
    {
     return true;
    }
    else
    {
     return false;
    }

  }
  public bool SignatureDeformatter(string p_strKeyPublic, byte[] HashbyteDeformatter, string p_strDeformatterData)
  {

    byte[] DeformatterData;
    System.Security.Cryptography.RSACryptoServiceProvider RSA = new System.Security.Cryptography.RSACryptoServiceProvider();
    RSA.FromXmlString(p_strKeyPublic);
    System.Security.Cryptography.RSAPKCS1SignatureDeformatter RSADeformatter = new System.Security.Cryptography.RSAPKCS1SignatureDeformatter(RSA);
    // When specifying decryption HASH Algorithm for MD5
    RSADeformatter.SetHashAlgorithm("MD5");
    DeformatterData =Convert.FromBase64String(p_strDeformatterData);
    if(RSADeformatter.VerifySignature(HashbyteDeformatter,DeformatterData))
    {
     return true;
    }
    else
    {
     return false;
    }

  }
  public bool SignatureDeformatter(string p_strKeyPublic, string p_strHashbyteDeformatter, string p_strDeformatterData)
  {

    byte[] DeformatterData;
    byte[] HashbyteDeformatter;
    HashbyteDeformatter = Convert.FromBase64String(p_strHashbyteDeformatter);
    System.Security.Cryptography.RSACryptoServiceProvider RSA = new System.Security.Cryptography.RSACryptoServiceProvider();
    RSA.FromXmlString(p_strKeyPublic);
    System.Security.Cryptography.RSAPKCS1SignatureDeformatter RSADeformatter = new System.Security.Cryptography.RSAPKCS1SignatureDeformatter(RSA);
    // When specifying decryption HASH Algorithm for MD5
    RSADeformatter.SetHashAlgorithm("MD5");
    DeformatterData =Convert.FromBase64String(p_strDeformatterData);
    if(RSADeformatter.VerifySignature(HashbyteDeformatter,DeformatterData))
    {
     return true;
    }
    else
    {
     return false;
    }

  }

  #endregion

  #endregion
 }
}

I hope this article is helpful to your C# program design.