zoukankan      html  css  js  c++  java
  • RSA加密

    简介:

    1. RSA加密算法是一种非对称可逆加密算法。公钥公开,私钥保密,它的加密解密算法是公开的。公钥负责加密,私钥负责解密。

    2. 它既能用于加密,也能用于数字签名。

    2.1 数字签名 :签名就是在信息的后面再加上一段内容,可以证明信息没有被修改过。数字签名有两种功效:一是能确定消息确实是由发送方签名并发出来的,因为别人假冒不了发送方的签名。二是数字签名能确定消息的完整性。数字签名是个加密的过程,数字签名验证是个解密的过程。

      /// <summary>
      /// 非对称加密算法RSA
      /// </summary>
      public static class RSA
      {
        /// <summary>
        /// 要使用的密钥的大小(以位为单位)
        /// </summary>
        public enum KeySize : int
        {
          Key1024 = 1024,
          Key2048 = 2048,
          Key3072 = 3072,
          Key7680 = 7680,
          Key15360 = 15360,
    
        }
    
        /// <summary>
        /// RSA秘钥
        /// </summary>
        public class RSAKeys
        {
          /// <summary>
          /// 公钥
          /// </summary>
          public string PublicKey;
          /// <summary>
          /// 私钥
          /// </summary>
          public string PrivateKey;
        }
    
        /// <summary>
        /// 生成 RSA 公钥和私钥
        /// </summary>
        /// <param name="keySize">要使用的密钥的大小(以位为单位)</param>
        /// <returns></returns>
        public static RSAKeys CreateRSAKeys(KeySize keySize)
        {
          RSAKeys rsaKeys = new RSAKeys();
          using (RSACryptoServiceProvider rsa = new RSACryptoServiceProvider((int)keySize))
          {
            rsaKeys.PublicKey = rsa.ToXmlString(false);
            rsaKeys.PrivateKey = rsa.ToXmlString(true);
            return rsaKeys;
          }
        }
    
        /// <summary>
        /// 生成 RSA 公钥和私钥XML文件
        /// </summary>
        /// <param name="keySize">要使用的密钥的大小(以位为单位)</param>
        /// <param name="savePrivateFile">保存私钥文件的物理路径</param>
        /// <param name="savePublicFile">保存公钥文件的物理路径</param>
        /// <returns></returns>
        public static void CreateRSAKeysXml(KeySize keySize, string savePrivateFile, string savePublicFile)
        {
          RSAKeys rsaKeys = CreateRSAKeys(keySize);
          using (StreamWriter writer = new StreamWriter(savePrivateFile))
          {
            writer.WriteLine(rsaKeys.PrivateKey);
          }
          using (StreamWriter writer = new StreamWriter(savePublicFile))
          {
            writer.WriteLine(rsaKeys.PublicKey);
          }
        }
    
        /// <summary>
        /// RSA加密
        /// </summary>
        /// <param name="publickey"> 公钥 </param>
        /// <param name="data"> 待加密的内容 </param>
        /// <param name="privatekey"> 以指定编码方式加载明文</param>
        /// <returns> 加密后的密文 </returns>
        public static string RSAEncrypt(string data, string publickey, Encoding dataEncoding)
        {
          using (RSACryptoServiceProvider rsa = new RSACryptoServiceProvider())
          {
            rsa.FromXmlString(publickey);
            byte[] encryptBytes = rsa.Encrypt(dataEncoding.GetBytes(data), false);
            return Convert.ToBase64String(encryptBytes);
          }
        }
    
        /// <summary>
        /// RSA解密
        /// </summary>
        /// <param name="data"> 要解密的密文 </param>
        /// <param name="privatekey"> 私钥 </param>
        /// <param name="privatekey"> 解密后以指定编码方式返回 </param>
        /// <returns> 解密后的明文 </returns>
        public static string RSADecrypt(string data, string privatekey, Encoding dataEncoding)
        {
          using (RSACryptoServiceProvider rsa = new RSACryptoServiceProvider())
          {
            rsa.FromXmlString(privatekey);
            byte[] decryptBytes = rsa.Decrypt(Convert.FromBase64String(data), false);
            return dataEncoding.GetString(decryptBytes);
          }
        }
    
      }
  • 相关阅读:
    node.js是什么
    python基础 filter ,列表,字典,集合 中根据 条件 筛选 数据
    nginx 自动补全www,当不输入www时候自动补全www
    python爬虫,接口是post请求,参数是request payload 的形式,如何传参
    python使用with开启线程锁
    linux nohup后台执行脚本并指定文件输出 ,nohup 修改默认日志输出文件
    python线程锁
    nginx yum安装启动
    redis desktop manager 远程连接服务器上的redis
    职位列表中英对照
  • 原文地址:https://www.cnblogs.com/tlmbem/p/10800001.html
Copyright © 2011-2022 走看看