コード例 #1
0
 private static RsaKeyHelper TryResolvePrivateKeyWithNoFormatDeclare(string keyString, RsaKeyHelper.KeyFormat format)
 {
     try
     {
         string pkcs1  = RsaKeyHelper.FormatPrivateKey(keyString, format);
         var    helper = RsaKeyHelper.FromPemKeyString(pkcs1);
         helper.RSACryptoServiceProvider();
         return(helper);
     }
     catch (Exception ex)
     {
         return(null);
     }
 }
コード例 #2
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="keyString">密钥字符串</param>
        /// <exception cref="InvalidKeyFormatException"></exception>
        /// <returns></returns>
        public static PemCertificate ReadFromKeyString(string keyString)
        {
            PemCertificate pemcert = new PemCertificate();
            RsaKeyHelper   helper  = null;

            if (keyString.StartsWith("-----"))
            {
                helper = RsaKeyHelper.FromPemKeyString(keyString);
            }
            else
            {
                //纯密钥文本,不带声明格式
                keyString = keyString.Replace("\r", "").Replace("\n", "");
                if (Convert.FromBase64String(keyString).Length < 400)
                {
                    keyString = RsaKeyHelper.FormatPublicKey(keyString);
                    helper    = RsaKeyHelper.FromPemKeyString(keyString);
                }
                else
                {
                    helper = TryResolvePrivateKeyWithNoFormatDeclare(keyString, RsaKeyHelper.KeyFormat.pkcs1) ??
                             TryResolvePrivateKeyWithNoFormatDeclare(keyString, RsaKeyHelper.KeyFormat.pkcs8);
                }
            }
            if (helper == null)
            {
                throw new InvalidKeyFormatException("无法识别的PEM密钥格式");
            }
            pemcert._provider = helper.RSACryptoServiceProvider();
            return(pemcert);
            //byte[] res = null;
            //string type = pem.StartsWith(PEM_PRIVATE_KEY_HEADER) ? "RSA PRIVATE KEY" : pem.StartsWith(PEM_PUBLIC_KEY_HEADER) ? "PUBLIC KEY" : "PLAIN TEXT";
            //if (type == "PLAIN TEXT")
            //{
            //    res = Convert.FromBase64String(pem);
            //}
            //else
            //{
            //    byte[] data = Encoding.UTF8.GetBytes(pem);
            //    res = GetPem(type, data);
            //}

            //if (type.Equals("RSA PRIVATE KEY"))//私钥
            //{
            //    pemcert._provider = DecodeRSAPrivateKey(res);
            //}
            //else if (type.Equals("PUBLIC KEY"))
            //{
            //    pemcert._provider = DecodeX509PublicKey(res);
            //}
            //else if (type.Equals("PLAIN TEXT"))
            //{
            //    if (res.Length == 608 || res.Length == 611 || res.Length == 1193) //PKCS#1 PRIVATE KEY,keysize=1024,bytes=608
            //    {
            //        pemcert._provider = DecodeRSAPrivateKey(res);
            //    }
            //    else if (res.Length == 634 || res.Length == 635 || res.Length == 1217 || res.Length == 1218)//ASN.1 PRIVATE KEY
            //    {
            //        pemcert._provider = DecodeASN1PrivateKey(res);
            //    }
            //    else
            //    {
            //        pemcert._provider = DecodeX509PublicKey(res);
            //        if (pemcert._provider == null)
            //        {
            //            pemcert._provider = DecodeRSAPrivateKey(res);
            //            if (pemcert._provider == null)
            //            {
            //                pemcert._provider = DecodeASN1PrivateKey(res);
            //            }
            //        }
            //    }
            //}
            //return pemcert;
        }