C# 通过RSA和SHA256签名

简单的记录一下。还望指点

/// <summary>
/// 通过RSA 和 SHA256进行签名
/// </summary>
public static class signRSAHelper{
    public static string publicKey;
    public static string ToXmlStringExt(this RSA rsa,bool includePrivateParamters){
        var p = rsa.ExportParameters(includePrivateParamters);
        XElement xml;
        if(includePrivateParamters){
            xml = new XElement("RESKeyValue", 
                new XElement("Modulus",Convert.ToBase64String(p.Modulus)),
                new XElement("Exponent",Convert.ToBase64String(p.Exponent)),
                new XElement("P",Convert.ToBase64String(p.P)),
                new XElement("Q",Convert.ToBase64String(p.Q)),
                new XElement("DP",Convert.ToBase64String(p.DP)),
                new XElement("InverseQ",Convert.ToBase64String(p.InverseQ))
            );
        }else{
            xml = new XElement("RSAKeyVaule",
                new XElement("Modulus",Convert.ToBase64String(p.Modulus)),
                new XElement("Exponent",Convert.ToBase64String(p.Exponent))
            );
        }
        return xml?.ToString();
    }
    public static void FromXmlStringExt(this RSA rsa,string parametersAsXml){
        var xml = XDocument.Parse(parametersAsXml);
        var root = xml.Element("RSAKeyValue");
        var p = new RSAParameters{
            Modulus = Convert.FromBase64String(root.Element("Modulus").Value),
            Exponent = Convert.FromBase64String(root.Element("Exponent").Value)
        };
        if(root.Element("P") != null){
            p.P = Convert.FromBase64String(root.Element("P").Value);
            p.Q = Convert.FromBase64String(root.Element("Q").Value);
            p.DP = Convert.FromBase64String(root.Element("DP").Value);
            p.DQ = Convert.FromBase64String(root.Element("DQ").Value);
            p.InverseQ = Convert.FromBase64String(root.Element("InverseQ").Value);
        }
        rsa.ImportParameters(p);
    }
    public static string GenerateSignature(string data){
        byte [] dataBytes = Encoding.Unicode.GetBytes(data);
        var sha = SHA256.Create();
        var Hashdata = sha.ComputeHash(dataBytes);
        var rsa = RSA.Create();

        publicKey = rsa.ToXmlString(false);
        return Convert.ToBase64String(rsa.SignHash(Hashdata,HashAlgorithmName.SHA256,RSASignaturePadding.Pkcs1));
    }
    public static bool ValiDateSignature(string data,string signatuare){
       byte [] dataBytes = Encoding.Unicode.GetBytes(data);
       var sha = SHA256.Create();
       var hashData = sha.ComputeHash(dataBytes);
       byte [] signatureBytes = Convert.FromBase64String(signatuare);
       var rsa = RSA.Create();
       rsa.FromXmlStringExt(publicKey);
       return rsa.VerifyHash(hashData,signatureBytes,HashAlgorithmName.SHA256,RSASignaturePadding.Pkcs1); 
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值