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);
          }
        }
    
      }
  • 相关阅读:
    用Python完成一个汇率转换器
    鸿蒙如何用JS开发智能手表App
    鸿蒙如何用JS开发智能手表App
    SAP Spartacus SplitViewComponent Migration 的一个具体例子
    SAP Spartacus B2B 页面 Popover Component 的条件显示逻辑
    SAP Spartacus 升级时关于 schematics 的更新
    SAP Spartacus B2B 页面 Disable 按钮的显示原理
    SAP Spartacus B2B 页面 Disable Confirmation 对话框的显示原理
    通过 Feature Level 动态控制 SAP Spartacus 的页面显示
    SAP Commerce Cloud Build Manifest Components
  • 原文地址:https://www.cnblogs.com/tlmbem/p/10800001.html
Copyright © 2011-2022 走看看