第一步獲取簽名證書私鑰
/// <summary> /// 獲取簽名證書私鑰 /// </summary> /// <param name="priKeyFile">證書文件路徑</param> /// <param name="keyPwd">密碼</param> /// <returns></returns> private static RSA GetPrivateKey(string priKeyFile, string keyPwd) { var pc = new X509Certificate2(priKeyFile, keyPwd, X509KeyStorageFlags.Exportable | X509KeyStorageFlags.MachineKeySet); return (RSA)pc.PrivateKey; }
第二步根據私鑰對數據進行簽名
/// <summary> /// 根據證書簽名數據 /// </summary> /// <param name="data">要簽名的數據</param> /// <param name="certPah">證書路徑</param> /// <param name="certPwd">密碼</param> /// <returns></returns> public string Sign(string data, string certPah, string certPwd) { var rsa = GetPrivateKey(certPah, certPwd); var rsaClear = new RSACryptoServiceProvider(); var paras = rsa.ExportParameters(true); rsaClear.ImportParameters(paras); var signData = rsa.SignData(Encoding.UTF8.GetBytes(data), HashAlgorithmName.SHA256, RSASignaturePadding.Pkcs1); return Convert.ToBase64String(signData); }