.Net加密与解密——非对称加密之加密模式

本文涉及的产品
密钥管理服务KMS,1000个密钥,100个凭据,1个月
简介:   一,非对称加密         非对称加密具有一组密钥对,一个是对外公开的,任何人都可以获取,称为公钥;         一个是自行保管并严格保密的,称为私钥。     规则如下:            由某人A的公钥加密消息,只能由A的私钥进行解密;    由A的私钥加密的消息,只能由A的公钥解密。


  一,非对称加密


        非对称加密具有一组密钥对,一个是对外公开的,任何人都可以获取,称为公钥;

        一个是自行保管并严格保密的,称为私钥。



    规则如下:

       

   由某人A的公钥加密消息,只能由A的私钥进行解密;

   由A的私钥加密的消息,只能由A的公钥解密。

 

   发送方,接收方都持有公钥/私钥对,因此一共会有四个密钥。非堆成加密的好处在于,私钥自己持有,公钥完全公开。



二,加密模式


     

步骤:

1,接收方公布自己的公钥,任何人都可以获得。

2,发送方使用接收方的公钥对消息进行加密,然后发送。

3接收方使用自己的私钥对消息进行解密。

 

 

缺点:

1,无法确定消息是由谁发送的。



三,加密模式Demo



/*
 
 //加密模式
 
 */



namespace 非对称加密
{
    class Program
    {
        static void Main(string[] args)
        {
            string plainText = "hello world";
            string publicKey = "<RSAKeyValue><Modulus>qA89WuhLCmvYHJqw+mfjRZ6Ep8xuicvRkVWkuufRHBAmLgXt2lHThSSBsZhFEECHqvwGFF+OybGj1Ki72A3h056tM6yRNppJFaJGGrnsjsWPPNa14E6f+ZBvC/MZRISLGNTDxhbHuvNSMx+hLU+Skz+B75RCMoYuEOuP8GxFEqs=</Modulus><Exponent>AQAB</Exponent></RSAKeyValue>";

            string encryptedText = RSACryptoHelper.Encrypt(publicKey, plainText);  //机密啦~~
            Console.WriteLine(encryptedText);


            string privateKey = "<RSAKeyValue><Modulus>qA89WuhLCmvYHJqw+mfjRZ6Ep8xuicvRkVWkuufRHBAmLgXt2lHThSSBsZhFEECHqvwGFF+OybGj1Ki72A3h056tM6yRNppJFaJGGrnsjsWPPNa14E6f+ZBvC/MZRISLGNTDxhbHuvNSMx+hLU+Skz+B75RCMoYuEOuP8GxFEqs=</Modulus><Exponent>AQAB</Exponent><P>7VxYssHAiMZtnVzgK3h3U9llNZSa5MCK4/iLvATQ5h3+yHegT0t+q2Tv844QUxcBPvkkrF+uvSb043Nw65KoTw==</P><Q>tUG739ddGWVrsBxle1ZmuABVBzeUNUiCOsbcGP/LsmbScdnk46rIfjVZ3NGlfptbAv4I7MPatr8Je1O5GL485Q==</Q><DP>ZyFXnJuYhxUILXZcJCccWb88PVKLFlceQb0NIa1KAqIHwJxReAKKT/f0VfNk3mVBclYX/Bk6uA7EGktfRcub+w==</DP><DQ>rLubBiNgBo6/hFJbZ6GcPCec4EbYB7s02DygjXZfsYEJdhQ3a7taW+QN4kEsHK6CmiRrbu7qpJMDvzK3R1wr/Q==</DQ><InverseQ>a0q3ffhjSHdaZW0QrkqZNUNSQ+j5/ltPS9zaJQiVhO2abaYaGwKaVVsbuD7cB+i4EasAw4uQHrk456Vkw/HQnw==</InverseQ><D>DyXIfvAfC2JrCTD8MKW6e2TtSf6IHA1t5y6T+XC5jVD7T/yi0qG7ce23bt1tpChc0hGDLsTqJs3HGXzX6YJez0Frz37UuNNsNyrhh3cAnxQuAwaCZMF7tPYOQbmgXP5OFpgaIjUmhMwysmm9WdrTocE6h39t5QlLy7g6xH9MJ+k=</D></RSAKeyValue>";

            string clearText = RSACryptoHelper.Decrypt(privateKey, encryptedText);  //解密
            Console.WriteLine(clearText);
            Console.ReadKey();


        }
    }

    public class RSACryptoHelper
    {

        #region 密钥获取方法——暂未封装进来

            //方法一:
                //string privateKey= provider.ToXmlString(true);//获得公/私钥对
                //string publicKey= provider.ToXmlString(false);//获得公钥对
            //方法二:
                //RSAParameters privateKey = provider.ExportParameters(true);//获得公钥私钥对
                //RSAParameters publicKey = provider.ExportParameters(false);//获得公钥


        #endregion

        /// <summary>
        /// 发送方加密
        /// </summary>
        /// <param name="publicKeyXml">The public key XML.</param>
        /// <param name="plainText">The plain text.</param>
        /// <returns>System.String.</returns>
        /// <remarks>Editor:v-liuhch CreateTime:2015/5/16 22:06:54</remarks>
        public static string Encrypt(string publicKeyXml, string plainText) {
            RSACryptoServiceProvider provider = new RSACryptoServiceProvider();
            provider.FromXmlString(publicKeyXml); //使用公钥初始化对象
            byte[] plainData = Encoding.Default.GetBytes(plainText);
            byte[] encryptedData = provider.Encrypt(plainData, true);//对数据进行加密
            return Convert.ToBase64String(encryptedData);
        }


        /// <summary>
        /// 接收方解密
        /// </summary>
        /// <param name="privateKeyXml">The private key XML.</param>
        /// <param name="encryptedText">The encrypted text.</param>
        /// <returns>System.String.</returns>
        /// <remarks>Editor:v-liuhch CreateTime:2015/5/16 22:11:09</remarks>
        public static string Decrypt(string privateKeyXml, string encryptedText) {

            RSACryptoServiceProvider provider = new RSACryptoServiceProvider();
            provider.FromXmlString(privateKeyXml);//使用私钥对数据进行初始化
            byte[] encryptedData = Convert.FromBase64String(encryptedText);
            byte[] plainData = provider.Decrypt(encryptedData, true);  //对数据进行解密
            string plainText = Encoding.Default.GetString(plainData);  //明文
            return plainText;

        
        }


    }
}











目录
相关文章
|
3月前
|
存储 数据安全/隐私保护
.NET Core 究竟隐藏着怎样的神秘力量,能实现强身份验证与数据加密?
【8月更文挑战第28天】在数字化时代,数据安全与身份验证至关重要。.NET Core 提供了强大的工具,如 Identity 框架,帮助我们构建高效且可靠的身份验证系统,并支持高度定制化的用户模型和认证逻辑。此外,通过 `System.Security.Cryptography` 命名空间,.NET Core 还提供了丰富的加密算法和工具,确保数据传输和存储过程中的安全性。以下是一个简单的示例,展示如何使用 .NET Core 的 Identity 框架实现用户注册和登录功能。
39 3
|
3月前
|
数据库 开发者
.NET 异步编程之谜:async/await 模式究竟隐藏着怎样的神奇力量?
【8月更文挑战第28天】在当今注重效率和响应性的软件开发领域,.NET 的 async/await 模式如同得力助手,简化异步代码编写,使代码更易理解和维护。通过后台执行耗时操作,如网络请求和数据库查询,避免阻塞主线程,显著提升系统响应性。此模式不仅适用于网络请求,还广泛应用于数据库操作和文件读写。合理使用 async/await 可大幅优化性能,但需注意避免过度使用、正确处理调用链及异常,以确保系统稳定性和高效性。深入探索 async/await,助您构建更出色的应用程序。
49 0
|
24天前
|
网络协议 大数据 网络架构
桥接模式和NET模式的区别
桥接模式和NET模式的区别
31 0
|
2月前
|
数据安全/隐私保护
aes之ecb模式的加密解密
aes之ecb模式的加密解密
|
1月前
|
安全 网络协议 网络安全
【HTTPS】对称加密和非对称加密
【HTTPS】对称加密和非对称加密
30 0
|
2月前
|
算法 安全 网络安全
概念区分:对称加密、非对称加密、公钥、私钥、签名、证书
概念区分:对称加密、非对称加密、公钥、私钥、签名、证书
81 0
|
3月前
|
敏捷开发 设计模式 开发者
【揭秘终极利器】AgileEAS.NET:服务定位器模式的魔法,如何让企业级软件开发瞬间提速?揭秘背后的技术奥秘与实战指南!
【8月更文挑战第16天】AgileEAS.NET是基于DotNet的企业级敏捷开发平台,其服务定位器模式助力构建高度解耦系统。通过全局服务目录动态查找服务,避免硬编码依赖。在AgileEAS.NET中,服务定位器以静态类形式封装服务注册与检索功能。示例展示了如何注册与获取服务实例,如在`UserController`中通过服务定位器使用`IUserService`。此模式整合到框架生命周期管理,便于各处获取服务实例,提升开发效率。然而,应适度使用并考虑依赖注入容器以增强代码可维护性和可测试性。
69 4
|
3月前
|
存储 算法 安全
|
3月前
|
开发框架 监控 .NET
|
4月前
|
搜索推荐 安全 网络安全
AES 加密解密技术原理模式和实践
AES (Advanced Encryption Standard), aka Rijndael, is a symmetric encryption algorithm offering high security and speed over DES.
下一篇
无影云桌面