• .net core 使用RSA获取私钥证书并签名


    RSA在.NET Core的改动

    以前我们使用RSA加密主要是使用RSACryptoServiceProvider这个类,在.NET Core中也有这个类,但是这个类并不支持跨平台,所以如果你是用这个类来进行加/解密在windows上运行是完全没有错误的,但是只要你一放到Linux下就会出现异常。

    查阅资料得知,要解决这个问题,需要改用 System.Security.Cryptography.RSA.Create() 工厂方法,使用它之后,在 Windows 上创建的是 System.Security.Cryptography.RSACng 的实例,在 Mac 与 Linux 上创建的是 System.Security.Cryptography.RSAOpenSsl 的实例,它们都继承自 System.Security.Cryptography.RSA 抽象类。

    这里要讲一下RSA2算法。

    什么是RSA2 ?RSA2 是在原来SHA1WithRSA签名算法的基础上,新增了支持SHA256WithRSA的签名算法。该算法比SHA1WithRSA有更强的安全能力。

    算法名称标准签名算法名称备注
    RSA2 SHA256WithRSA (强烈推荐使用),强制要求RSA密钥的长度至少为2048
    RSA SHA1WithRSA 对RSA密钥的长度不限制,推荐使用2048位以上

    签名的作用:保证数据完整性,机密性和发送方角色的不可抵赖性

    看下代码:

         /// <summary>
            /// 获取证书私钥并签名
            /// </summary>
            /// <param name="priKeyFile">私钥证书</param>
            /// <param name="keyPwd">私钥密码</param>
            /// <param name="data">签名内容</param>
            /// <returns></returns>
            private static string PrivateSign(string priKeyFile, string keyPwd, string data) {
    
                var pc = new X509Certificate2(priKeyFile, keyPwd, X509KeyStorageFlags.Exportable | X509KeyStorageFlags.MachineKeySet);
    
                var data_byte = Encoding.UTF8.GetBytes(data);
    
                var result_byte = pc.GetRSAPrivateKey().SignData(data_byte, HashAlgorithmName.SHA256, RSASignaturePadding.Pkcs1);
    
                var strResult = Convert.ToBase64String(result_byte);
    
                return strResult;
    
            }
    HashAlgorithmName.SHA256  //获取表示“SHA256”的哈希算法名称。
    RSASignaturePadding.Pkcs1 //获取使用 PKCS #1 v1.5 填充模式的对象。
  • 相关阅读:
    git的优秀教程
    线性表的顺序存储结构和链式存储结构的比较
    python3基础知识学习记录
    thinkPHP为什么设置一个单入口文件?
    2017年读过的专业书
    DFS(深度优先搜索)模板
    HDOJ2553-N皇后问题(DFS)
    POJ(2784)Buy or Build
    并查集 分类: 并查集 2015-07-09 16:32 0人阅读 评论(0) 收藏
    Number of Containers(数学) 分类: 数学 2015-07-07 23:42 1人阅读 评论(0) 收藏
  • 原文地址:https://www.cnblogs.com/wsprince/p/10710566.html
Copyright © 2020-2023  润新知