利用RSACryptoServiceProvider进行RSA加密解密

Posted 记性特差

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了利用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加密解密的主要内容,如果未能解决你的问题,请参考以下文章

如何利用ArcGis生成TPK

MS16-032漏洞利用

如何利用Burp Suite进行爆破

自制ThinkPHP漏洞利用工具

RL - 09 探索与利用

Redis未授权漏洞利用方式