c# RSA 签名

签名本身有现成的类库可以使用,但是类库要求 XML 格式的秘钥,如果其他人只提供 PEM 格式的秘钥,需要将秘钥转换成 XML 格式的秘钥。

方法1:使用路遥工具箱

 方法2:使用 XC.RSAUtil 类库进行转换(要求 .net core)

 

using System;

namespace ConsoleAppCore
{
    class Program
    {
        static void Main(string[] args)
        {
            string pkcs1Key = @"MIIBOQIBAAJBAMmyN/cdipSvD1N3YTByXoQIwtjy9dW13pCy5FfNes9KAVEjsk0NN8nTR2rAFGIN+cms9bZU3LpLPjtum4/HVPUCAwEAAQJAT+Qm5NwvszswP+hud8klhPkPbO230IHsebZSWjEK7yX2GpQuULPWue+p3mVoCUNaP+KLLIQch5I0DD4OEnKi1QIhAOdURi7gRDznTKv9BlzyJR4lmyba8DABE6uhulwGVpIXAiEA3zToE4kB/H6aaU+TVJ3DQA9vnKuSL5780gRCQO6p9NMCIFEnCGQDewzem9AuOKA8tnbH/JD5947vocXxO55y/sXLAiBMYdOFU95NJJn8rdGSJEa7tkyQhZoKF9MWn4R4qfOZJwIgdWdBWMRZdkhpVQ4zGZPSpTh2uYR5i1pPxOJhv+b+kb0=";
            Console.WriteLine(XC.RSAUtil.RsaKeyConvert.PrivateKeyPkcs1ToXml(pkcs1Key));
            Console.ReadLine();
        }
    }
}

 

 有了 XML 格式的秘钥就可以进行签名了(不要求 .net core):

  private static string Signature(string originalText, string privateKey)
        {
            byte[] byteData = Encoding.UTF8.GetBytes(originalText);
            RSACryptoServiceProvider provider = new RSACryptoServiceProvider();
            provider.FromXmlString(privateKey);
            byteData = provider.SignData(byteData, new SHA256CryptoServiceProvider());
       //return Convert.ToBase64String(byteData);//Base64格式
      return BitConverter.ToString(byteData, 0).Replace("-", string.Empty).ToLower();//HEX格式
}

 

posted @ 2022-06-02 10:36  echo三毛  阅读(916)  评论(0编辑  收藏  举报