zoukankan      html  css  js  c++  java
  • .net5 RSA

        <PackageReference Include="BouncyCastle.NetCore" Version="1.8.8" />

    一、后端

     public static class RSASignatureEncrypterHelp
        {
            /// <summary>
            /// 生成PEM格式的公钥和密钥
            /// </summary>
            /// <param name="strength">长度</param>
            /// <returns>Item1:公钥;Item2:私钥;</returns>
            public static (string publicKey, string privateKey) CreateRSAKey(int strength = 1024)
            {
                RsaKeyPairGenerator r = new RsaKeyPairGenerator();
                r.Init(new KeyGenerationParameters(new SecureRandom(), strength));
                AsymmetricCipherKeyPair keys = r.GenerateKeyPair();
    
                TextWriter privateTextWriter = new StringWriter();
                PemWriter privatePemWriter = new PemWriter(privateTextWriter);
                privatePemWriter.WriteObject(keys.Private);
                privatePemWriter.Writer.Flush();
    
                TextWriter publicTextWriter = new StringWriter();
                PemWriter publicPemWriter = new PemWriter(publicTextWriter);
                publicPemWriter.WriteObject(keys.Public);
                publicPemWriter.Writer.Flush();
    
    
                return (publicTextWriter.ToString(), privateTextWriter.ToString());
            }
    
            /// <summary>
            /// RSA解密
            /// </summary>
            /// <param name="privateKey">私钥</param>
            /// <param name="decryptstring">待解密的字符串(Base64)</param>
            /// <returns>解密后的字符串</returns>
            public static string RSADecrypt(this string decryptstring, string privateKey)
            {
                using (TextReader reader = new StringReader(privateKey))
                {
                    dynamic key = new PemReader(reader).ReadObject();
                    var rsaDecrypt = new Pkcs1Encoding(new RsaEngine());
                    if (key is AsymmetricKeyParameter)
                    {
                        key = (AsymmetricKeyParameter)key;
                    }
                    else if (key is AsymmetricCipherKeyPair)
                    {
                        key = ((AsymmetricCipherKeyPair)key).Private;
                    }
                    rsaDecrypt.Init(false, key);  //这里加密是true;解密是false  
    
                    byte[] entData = Convert.FromBase64String(decryptstring);
                    entData = rsaDecrypt.ProcessBlock(entData, 0, entData.Length);
                    return Encoding.UTF8.GetString(entData);
                }
            }
    
            /// 加密
            /// </summary>
            /// <param name="publicKey">公钥</param>
            /// <param name="encryptstring">待加密的字符串</param>
            /// <returns>加密后的Base64</returns>
            public static string RSAEncrypt(this string encryptstring, string publicKey)
            {
                using (TextReader reader = new StringReader(publicKey))
                {
                    AsymmetricKeyParameter key = new PemReader(reader).ReadObject() as AsymmetricKeyParameter;
                    Pkcs1Encoding pkcs1 = new Pkcs1Encoding(new RsaEngine());
                    pkcs1.Init(true, key);//加密是true;解密是false;
                    byte[] entData = Encoding.UTF8.GetBytes(encryptstring);
                    entData = pkcs1.ProcessBlock(entData, 0, entData.Length);
                    return Convert.ToBase64String(entData);
                }
            }
        }

    二、前端

    import { JSEncrypt } from 'jsencrypt';
     //new一个对象
      let encrypt = new JSEncrypt()
      //设置公钥
      encrypt.setPublicKey(publicKey)
      //data是要加密的数据,此处不用注意+号,因为rsa自己本身已经base64转码了,不存在+,全部是二进制数据
      let result = encrypt.encrypt(password)
      return result;
    作者: jamesbing
    提示: 欢迎转载,但是必须保留本文的署名 jamesbing (包含链接)
  • 相关阅读:
    linux下的shell 快捷键
    Python3.x和Python2.x的区别
    [Python2.x] 利用commands模块执行Linux shell命令
    redis缓存策略
    高并发解决方案
    java8 lambda表达式应用
    java读写分离的实现
    数据库读写分离
    大数据量处理方案:分布式数据库
    google的CacheBuilder缓存
  • 原文地址:https://www.cnblogs.com/gaobing/p/14892775.html
Copyright © 2011-2022 走看看