首页 > 代码库 > 利用RSACryptoServiceProvider进行RSA加密解密

利用RSACryptoServiceProvider进行RSA加密解密

利用RSACryptoServiceProvider进行RSA加密解密

加密获取公私钥

 static void Main(string[] args)        {            RsaPrivateKey xmlPrivateKeys;            RsaPublicKey xmlPublicKey;            RSAKey(out xmlPrivateKeys,out xmlPublicKey);        }        public static void RSAKey(out RsaPrivateKey xmlPrivateKeys, out RsaPublicKey xmlPublicKey)        {            RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();            string xmlPrivateKeyStr = rsa.ToXmlString(true);            string xmlPublicKeyStr = rsa.ToXmlString(false);            xmlPublicKey = XmlCustomSerialization.XmlDeserialize<RsaPublicKey>(xmlPublicKeyStr);            xmlPublicKey.PublicKeyStr = xmlPublicKeyStr;            xmlPrivateKeys = XmlCustomSerialization.XmlDeserialize<RsaPrivateKey>(xmlPrivateKeyStr);            xmlPrivateKeys.PrivateKeyStr = xmlPrivateKeyStr;        }

RsaPrivateKey

技术分享
XmlType(AnonymousType = true), XmlRoot(Namespace = "", IsNullable = false, ElementName = "RSAKeyValue")]    public class RsaPrivateKey    {        // Fields        //[CompilerGenerated, DebuggerBrowsable(DebuggerBrowsableState.Never)]        //private string <PrivateKeyStr> k__BackingField;        private string exponentField;        private string modulusField;        // Methods        public RsaPrivateKey() { }        // Properties        public string Exponent { get; set; }        [XmlElement("Modulus")]        public string Modulus { get; set; }        public string PrivateKeyStr { get; set; }    }
View Code

RsaPublicKey

技术分享
[XmlType(AnonymousType = true), XmlRoot(Namespace = "", IsNullable = false, ElementName = "RSAKeyValue")]    public class RsaPublicKey    {        // Fields        //[CompilerGenerated, DebuggerBrowsable(DebuggerBrowsableState.Never)]        //private string <PublicKeyStr>k__BackingField;        private string dField;        private string dpField;        private string dqField;        private string exponentField;        private string inverseQField;        private string modulusField;        private string pField;        private string qField;        // Methods        public RsaPublicKey() { }        // Properties        public string D { get; set; }        public string DP { get; set; }        public string DQ { get; set; }        public string Exponent { get; set; }        public string InverseQ { get; set; }        public string Modulus { get; set; }        public string P { get; set; }        public string PublicKeyStr { get; set; }        public string Q { get; set; }    }
View Code

 

XmlCustomSerialization xml序列化帮助类

public class XmlCustomSerialization    {        // Methods        public static T XmlDeserialize<T>(string item)        {            using (StringReader stringReader = new StringReader(item))            {                XmlSerializer serializer = new XmlSerializer(typeof(T));                return (T)serializer.Deserialize(stringReader);            }        }        public static string XmlSerialize(object item, bool removeNamespace = false, bool omitXmlDeclaration = false)        {            string serialXML = string.Empty;            try            {                StringBuilder sb = new StringBuilder();                XmlWriterSettings settings1 = new XmlWriterSettings                {                    Indent = true,                    OmitXmlDeclaration = omitXmlDeclaration,                    Encoding = Encoding.UTF8                };                XmlWriterSettings settings = settings1;                XmlSerializerNamespaces ns = new XmlSerializerNamespaces();                ns.Add(string.Empty, string.Empty);                XmlSerializer xmlSerializer = new XmlSerializer(item.GetType());                using (XmlWriter writer = XmlWriter.Create(sb, settings))                {                    if (removeNamespace)                    {                        xmlSerializer.Serialize(writer, item, ns);                    }                    else                    {                        xmlSerializer.Serialize(writer, item);                    }                }                serialXML = sb.ToString();            }            catch            {                throw;            }            return serialXML;        }        public static string XmlSerializeToPureXML(object item)        {            string serialXML = string.Empty;            XmlWriterSettings xmlWriterSettings = new XmlWriterSettings            {                OmitXmlDeclaration = true,                Indent = true,                CloseOutput = true,                Encoding = Encoding.UTF8            };            using (StringWriter stringWriter = new StringWriter())            {                using (XmlWriter xmlWriter = XmlWriter.Create(stringWriter, xmlWriterSettings))                {                    XmlSerializer xmlSerializer = new XmlSerializer(item.GetType());                    XmlSerializerNamespaces xmlSerializerNamespaces = new XmlSerializerNamespaces();                    xmlSerializerNamespaces.Add(string.Empty, string.Empty);                    xmlSerializer.Serialize(xmlWriter, item, xmlSerializerNamespaces);                    serialXML = stringWriter.ToString();                    xmlWriter.Flush();                }                stringWriter.Flush();            }            return serialXML;        }        public static string XmlSerializeWithNoXmlDeclaration(object item)        {            string serialXML = string.Empty;            XmlWriterSettings xmlWriterSettings = new XmlWriterSettings            {                OmitXmlDeclaration = true,                Indent = true,                CloseOutput = true,                Encoding = Encoding.UTF8            };            using (StringWriter stringWriter = new StringWriter())            {                using (XmlWriter xmlWriter = XmlWriter.Create(stringWriter, xmlWriterSettings))                {                    new XmlSerializer(item.GetType()).Serialize(xmlWriter, item);                    serialXML = stringWriter.ToString();                    xmlWriter.Flush();                }                stringWriter.Flush();            }            return serialXML;        }    }

 

利用RSACryptoServiceProvider进行RSA加密解密