`
隐形的翅膀
  • 浏览: 496905 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

C#实现的RSA加解密算法

阅读更多
实现类
using System;
using System.Collections.Generic;
using System.Text;
using System.Security.Cryptography;
using System.IO;
using System.Xml;

namespace MyRSA
{
    class RSAUtil
    {
        public void CreateRSAKey()
        {

            RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
            RSAParameters keys = rsa.ExportParameters(true);
            String pkxml = "<root>\n<Modulus>" + ToHexString(keys.Modulus) + "</Modulus>";
            pkxml += "\n<Exponent>" + ToHexString(keys.Exponent) + "</Exponent>\n</root>";
            String psxml = "<root>\n<Modulus>" + ToHexString(keys.Modulus) + "</Modulus>";
            psxml += "\n<Exponent>" + ToHexString(keys.Exponent) + "</Exponent>";
            psxml += "\n<D>" + ToHexString(keys.D) + "</D>";
            psxml += "\n<DP>" + ToHexString(keys.DP) + "</DP>";
            psxml += "\n<P>" + ToHexString(keys.P) + "</P>";
            psxml += "\n<Q>" + ToHexString(keys.Q) + "</Q>";
            psxml += "\n<DQ>" + ToHexString(keys.DQ) + "</DQ>";
            psxml += "\n<InverseQ>" + ToHexString(keys.InverseQ) + "</InverseQ>\n</root>";

            SaveToFile("publickey.xml", pkxml);
            SaveToFile("privatekey.xml", psxml);
           
        }
        public RSACryptoServiceProvider CreateRSADEEncryptProvider(String privateKeyFile)
        {
            RSAParameters parameters1;
            parameters1 = new RSAParameters();
            StreamReader reader1 = new StreamReader(privateKeyFile);
            XmlDocument document1 = new XmlDocument();
            document1.LoadXml(reader1.ReadToEnd());
            XmlElement element1 = (XmlElement)document1.SelectSingleNode("root");
            parameters1.Modulus = ReadChild(element1, "Modulus");
            parameters1.Exponent = ReadChild(element1, "Exponent");
            parameters1.D = ReadChild(element1, "D");
            parameters1.DP = ReadChild(element1, "DP");
            parameters1.DQ = ReadChild(element1, "DQ");
            parameters1.P = ReadChild(element1, "P");
            parameters1.Q = ReadChild(element1, "Q");
            parameters1.InverseQ = ReadChild(element1, "InverseQ");
            CspParameters parameters2 = new CspParameters();
            parameters2.Flags = CspProviderFlags.UseMachineKeyStore;
            RSACryptoServiceProvider provider1 = new RSACryptoServiceProvider(parameters2);
            provider1.ImportParameters(parameters1);
            return provider1;
        }
        public RSACryptoServiceProvider CreateRSAEncryptProvider(String publicKeyFile)
        {
            RSAParameters parameters1;
            parameters1 = new RSAParameters();
            StreamReader reader1 = new StreamReader(publicKeyFile);
            XmlDocument document1 = new XmlDocument();
            document1.LoadXml(reader1.ReadToEnd());
            XmlElement element1 = (XmlElement)document1.SelectSingleNode("root");
            parameters1.Modulus = ReadChild(element1, "Modulus");
            parameters1.Exponent = ReadChild(element1, "Exponent");
            CspParameters parameters2 = new CspParameters();
            parameters2.Flags = CspProviderFlags.UseMachineKeyStore;
            RSACryptoServiceProvider provider1 = new RSACryptoServiceProvider(parameters2);
            provider1.ImportParameters(parameters1);
            return provider1;
        }

        private byte[] ReadChild(XmlElement parent, string name)
        {
            XmlElement element1 = (XmlElement)parent.SelectSingleNode(name);
            return hexToBytes(element1.InnerText);
        }

        private string ToHexString(byte[] bytes) // 0xae00cf => "AE00CF "
        {
            string hexString = string.Empty;
            if (bytes != null)
            {
                StringBuilder strB = new StringBuilder();

                for (int i = 0; i < bytes.Length; i++)
                {
                    strB.Append(bytes[i].ToString("X2"));
                }
                hexString = strB.ToString();
            }
            return hexString;
        }
        public byte[] hexToBytes(String src)
        {
            int l = src.Length/2;
            String str;
            byte[] ret = new byte[l];

            for (int i = 0; i < l; i++)
            {
                str = src.Substring(i * 2, 2);
                ret[i] = Convert.ToByte(str, 16);
            }
            return ret;
        }

        public void SaveToFile(String filename, String data)
        {
            System.IO.StreamWriter sw = System.IO.File.CreateText(filename);
            sw.WriteLine(data);
            sw.Close();
        }

        public string EnCrypt(string str)
        {
            RSACryptoServiceProvider rsaencrype = CreateRSAEncryptProvider("publickey.xml");

            String text = str;

            byte[] data = new UnicodeEncoding().GetBytes(text);

            byte[] endata = rsaencrype.Encrypt(data, true);

            return ToHexString(endata);
        }

        public string DoEncrypt(string hexstr)
        {
            RSACryptoServiceProvider rsadeencrypt = CreateRSADEEncryptProvider("privatekey.xml");

            byte[] miwen = hexToBytes(hexstr);

            byte[] dedata = rsadeencrypt.Decrypt(miwen, true);

            return System.Text.UnicodeEncoding.Unicode.GetString(dedata);
        }
    }
}

测试程序
using System;
using System.Collections.Generic;
using System.Text;
using System.Security.Cryptography;

namespace MyRSA
{
    class Program
    {
       
        static void Main(string[] args)
        {
            Console.WriteLine("\n encrypt and de_encrypt test:\n===========================");
            
            RSAUtil rsa = new RSAUtil();

            //rsa.CreateRSAKey()

            Console.WriteLine("Please input a string\n");

            string mingwen = Console.ReadLine();

            string miwen = rsa.EnCrypt(mingwen);

            string jiemiwen=rsa.DoEncrypt(miwen);

            Console.WriteLine("Ming Wen is :"+mingwen+"\n");

            Console.WriteLine("Mi Wen is :"+miwen+"\n");

            Console.WriteLine("Jie Mi hou is :"+jiemiwen+"\n");

            Console.ReadLine();
        }
    }
}


0
0
分享到:
评论

相关推荐

    C# RSA加密解密

    本篇文章将深入探讨C#如何实现RSA加密解密,并结合Winform界面进行演示。 **1. RSA算法基础** RSA算法基于数论原理,包括大数因子分解的困难性。它包含两个密钥:公钥和私钥。公钥可以公开,用于加密;私钥必须...

    C# RSA分段加解密实现方法详解

    本篇文章将深入探讨C#中RSA分段加解密的实现方法。 首先,我们需要了解RSA加密的基本限制。在.NET框架中,RSA加密算法由于安全性的考虑,会在加密前添加一些随机数,这意味着单次加密的最大数据量受到限制。例如,...

    兼容JS和C#的RSA加密解密实例

    RSA加密解密是一种广泛应用于网络安全中的非对称加密算法,由Ron Rivest、Adi Shamir和Leonard Adleman三位科学家在1977年提出,因此得名RSA。这种算法基于大数因子分解的困难性,为数据提供了一种安全的加密方式,...

    用C#实现RSA的加密与解密

    C#是一种广泛用于开发桌面和Web应用程序的编程语言,它提供了强大的库来实现各种加密算法,其中包括著名的非对称加密算法——RSA。下面我们将深入探讨如何用C#实现RSA的加密与解密。 首先,RSA(Rivest-Shamir-...

    C#RSA私钥加密公钥解密

    总的来说,这个项目展示了如何在C#中使用`System.Numerics.BigInteger`实现RSA加密算法,同时提供了私钥加密和公钥解密的功能,确保了数据的安全性。为了实际应用,你需要理解并掌握RSA算法的原理,以及如何在.NET...

    RSA加密算法实现以及C#与java互通加解密

    ### RSA加密算法实现以及C#与Java互通加解密 #### 一、RSA算法简介 RSA算法是一种非对称加密算法,由Ron Rivest、Adi Shamir 和 Leonard Adleman 在1977年提出,并以其三人的名字首字母命名。RSA算法的安全性基于...

    C#RSA加密解密工具

    C# RSA加密解密工具是一种基于公钥/私钥对的加密算法实现,主要用于保障数据的安全传输和存储。RSA(Rivest-Shamir-Adleman)算法是公开密钥加密技术的鼻祖,由Ron Rivest、Adi Shamir和Leonard Adleman在1977年提出...

    C#Android互通RSA加密解密

    总结来说,"C# Android互通RSA加密解密"涉及了跨平台数据安全传输的核心技术,包括RSA加密算法的原理与应用,以及在C#和Android环境下的具体实现。通过合理的密钥管理,可靠的传输协议,以及详尽的测试,可以实现两...

    C#和Java实现互通的RSA&DES加解密算法

    本话题主要关注如何在C#和Java之间通过RSA和DES加密算法实现数据的安全互通。RSA是一种非对称加密算法,适用于小量数据加密,如密钥交换;而DES是对称加密算法,适合大量数据的快速加密,但安全性相对较低。 首先,...

    C#编写RSA加解密

    至此,我们已经完成了汉字的RSA加解密过程。需要注意的是,RSA更适合加密小量数据,如密钥或者会话标识,而非大量文本。对于大量数据,通常采用RSA来加密一个随机生成的对称密钥,然后用这个对称密钥去加密实际的...

    C# .net版 RSA 公钥加密私钥解密 私钥加密公钥解密

    在C# .NET中,我们可以使用System.Security.Cryptography命名空间下的RSACryptoServiceProvider类来实现RSA加解密。以下是一些关键步骤: 1. **生成密钥对**: - 使用RSACryptoServiceProvider的实例创建密钥对,...

    C#实现RSA加密算法

    标题提到的"C#实现RSA加密算法"着重讲述了如何在C#中利用大整数类BigInteger和RSACryptoServiceProvider类来完成私钥加密公钥解密的过程。以下是对这个话题的详细解释: 1. **RSA算法基础**: RSA算法由Rivest、...

    RSA非对称 C#解密、js加密实现登陆密文传输

    在C#中,可以使用`System.Security.Cryptography.RSACryptoServiceProvider`类来实现RSA加密和解密。首先,你需要生成一对RSA密钥,然后将公钥暴露给客户端(这里指的是JavaScript),私钥保留在服务器端。C#代码...

    C#RSA加密与JAVA解密,实现相互通信

    "C# RSA加密与JAVA解密,实现相互通信"的主题聚焦于如何利用RSA公钥/私钥加密算法在C#和Java两个不同的编程环境中实现安全的数据交换。RSA是一种非对称加密算法,它使用一对密钥——公钥和私钥,公钥用于加密,私钥...

    安全不安全002:C#实现RSA算法加密解密

    C#实现的RSA算法,全部为工程代码,开发环境visual studio2012。如果无法下载也可以直接看代码, https://blog.csdn.net/yysyangyangyangshan/article/details/80411134

    C#中关于RSA加密算法(案例代码) c#经典案例.pdf

    加密算法E和解密算法D也都是公开的。虽然秘密密钥SK是由公开密钥PK决定的,但却不能根据PK计算出SK。 在C#中实现RSA加密算法需要使用到RSACryptoServiceProvider类,该类提供了RSA加密算法的实现。下面是一个简单的...

    C# 实现与JAVA互通 加签/验签,RSA加密/解密

    * RSA加密解密:私钥解密,公钥加密。 * RSA数字签名-俗称加签验签:私钥加签,公钥验签。  * RSA加密解密:私钥解密,公钥加密。 * RSA数字签名-俗称加签验签:私钥加签,公钥验签。  * RSA加密解密:私钥...

    C#纯源代码实现RSA加解密-没有注释

    本文将深入探讨如何使用C#语言实现RSA加解密,并关注提供的源代码文件`RSA.cs`。 1. **RSA原理**: RSA算法的核心在于两个大素数的乘积,这两个素数是保密的,称为私钥。公钥是这两个素数的乘积和一个欧拉函数φ(n...

    RSA文件加解密(C#源代码)

    RSA文件加解密是信息安全领域中的一个重要话题,特别是在软件开发中,为了保护数据的安全,开发者经常需要对敏感信息进行加密处理。本示例是用C#语言实现的,利用RSA算法进行文件的加密和解密操作。RSA是一种非对称...

    C#实现字符串RSA加密与解密 算法工程下载

    本项目“C#实现字符串RSA加密与解密 算法工程下载”提供了一个C#语言编写的示例,帮助开发者理解并应用RSA加密算法。 RSA的核心原理基于大数因子分解的困难性。它使用一对公钥和私钥,公钥可以公开,用于加密数据;...

Global site tag (gtag.js) - Google Analytics