RSA 使用 xxx.pem文件 做公钥验密 私钥加密 的方法

/// 
        /// 私钥      
        /// prk是私钥文件名,
        /// 
        /// 
        /// 
        public static string Encrypt(string signstr)  
        {
            //私钥文件的位置(这里是放在了站点的根目录下)  
            string merKeyFile = "";
            if (HttpContext.Current != null)
            {
                //merKeyFile = HttpContext.Current.Server.MapPath("/Bin/") + "FyPrk.key";
                merKeyFile = HttpContext.Current.Server.MapPath("/Bin/") + "FyPrk.pem";
            }
            else
            {
                //merKeyFile = AppDomain.CurrentDomain.BaseDirectory + "FyPrk.key";
                merKeyFile = AppDomain.CurrentDomain.BaseDirectory + "FyPrk.pem";
            }

            string str= GenerateSignature(signstr, merKeyFile);

            return str.ToString();
        }

        /// 
        /// RSA 私钥加密
        /// 
        /// 
        /// 
        /// 
        public static string GenerateSignature(string strSign, string privateKeyPath)
        {
            if (!File.Exists(privateKeyPath)) return string.Empty;
            //载入私钥
            PemReader privatePEM = new PemReader(new StreamReader(privateKeyPath));
            AsymmetricKeyParameter privateKey =(AsymmetricKeyParameter)privatePEM.ReadObject();
            var sig = SignerUtilities.GetSigner("MD5WithRsa");
            sig.Init(true, privateKey);
            byte[] byteSign = Encoding.GetEncoding("GBK").GetBytes(strSign);
            sig.BlockUpdate(byteSign, 0, byteSign.Length);
            byte[] outByte = sig.GenerateSignature();
            string strOut = Convert.ToBase64String(outByte);
            return strOut;
        }
        
        /// 
        /// puk那个是公钥文件名  公钥验签
        /// 
        /// 明文
        /// 密文
        /// 
        public static bool Decrypt(string str, string signstr)
        {
            //公钥的位置
            string pgPubkFile = "";
            if (HttpContext.Current != null)
            {
                pgPubkFile = HttpContext.Current.Server.MapPath("/Bin/") + "FyPgPuk.pem";
            }
            else
            {
                pgPubkFile = AppDomain.CurrentDomain.BaseDirectory + "FyPgPuk.pem";
            }

            //解密结果
            return VerifyingSignature(str, pgPubkFile, signstr);
           
        }

        /// 
        /// RSA 公钥验密
        /// 
        /// 
        /// 
        /// 
        /// 
        public static bool VerifyingSignature(string str, string publicKeyPath, string signstr)
        {

            PemReader y1 = new PemReader(new StreamReader(publicKeyPath)); //载入公钥
            byte[] data = Encoding.GetEncoding("GBK").GetBytes(str);
            byte[] byteSign = System.Convert.FromBase64String(signstr);
            AsymmetricKeyParameter pubkey = (AsymmetricKeyParameter)y1.ReadObject();
            var sig2 = SignerUtilities.GetSigner("MD5WithRsa");
            sig2.Init(false, pubkey);
            sig2.BlockUpdate(data, 0, data.Length);
            bool result = sig2.VerifySignature(byteSign);
            return result;
        }

而且该文件必须要这样存值才有效

RSA 使用 xxx.pem文件 做公钥验密 私钥加密 的方法_第1张图片

比如是私钥: 就一定要写 ------BEGIN PRIVATE  KEY-----    里面是私钥------END PRIVATE  KEY-----

比如是公钥: 就一定要写 ------BEGIN PUBLIC  KEY-----    里面是公钥------END PUBLIC  KEY-----

你可能感兴趣的:(加密公共类)