zoukankan      html  css  js  c++  java
  • 介绍一个很好用的Rsa加解密的.Net库 Kalix.ApiCrypto

    Rsa非对称加密技术

    这个就不说了,大家上网搜索都知道,公钥加密,私钥解密。当然大家也可以自己实现。这里就懒了,就去找一个现成的库,Nuget上搜索,GitHub上搜索,发现.Net的加解密库,下载量,活跃度都不错的库很少。看到一个非常厉害的加解密库,但是这个是要收费的,所以你懂的。
    然后在github上看到了一个还不错的库Kalix.ApiCrypto

    Kalix.ApiCrypto

    作者的代码中有单元测试,能看懂个大概,我这里还是就RSA的加解密说一下这个库怎么用,毕竟都是英文的,这个库也没有太多的学习资料。

    证书生成

    作者很友好的封装了证书生成的方法,包括公钥和私钥,代码如下:

            var cert = RSACertificateBuilder.CreateNewCertificate("测试证书");
            //导出私钥
            var privateData = cert.Export(X509ContentType.Pkcs12, "5566");
            File.WriteAllBytes(Path.GetFullPath("private.pfx"), privateData);
            //导出公钥
            var publicData = cert.Export(X509ContentType.Cert);
            File.WriteAllBytes(Path.GetFullPath("public.cert"), publicData);
    

    使用RSA加解密

    从文件加载私钥,或者从证书管理器加载私钥都很方便,我这里私钥已经导入到windows证书管理器中,可以通过命令来查看

    cmd->certmgr.msc
    

    从证书管理器加载私钥代码如下:

    var store = new X509Store(StoreName.My, StoreLocation.CurrentUser);
            store.Open(OpenFlags.ReadOnly);
            var privatePfx = store.Certificates.Find(X509FindType.FindBySubjectName, "测试证书", false)[0];
            store.Close();
    

    公钥就从文件目录中加载

    var path = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "public.cert");
            var cert2 = new X509Certificate2(path);
    

    我们这里得到的公钥还是私钥,都是X509Certificate2对象类型,那么Kalix.ApiCrypto直接封装了一个类RSACertificateParser,可以通过这个类根据证书获取到对应的加解密对象。

    //获取私钥的加解密对象
            var privateCert = RSACertificateParser.ParsePrivateCertificate(privatePfx);
            //获取公钥的加解密对象
            var publiccert = RSACertificateParser.ParsePublicCertificate(cert2);
    

    获取到加解密对象之后,就可以进行加密解密了

    var data = "HelloWorld";
            var bytes = publiccert.EncryptValue(Encoding.UTF8.GetBytes(data));
            var data2 = Encoding.UTF8.GetString(privateCert.DecryptValue(bytes));
    

    使用起来还是比较方便的。有需要的小伙伴可以去试试。

  • 相关阅读:
    前端与算法 leetcode 344. 反转字符串
    JavaScript闭包使用姿势指南
    前端与算法 leetcode 48. 旋转图像
    前端与算法 leetcode 36. 有效的数独
    前端与算法 leetcode 1. 两数之和
    前端与算法 leetcode 283. 移动零
    前端与编译原理 用js去运行js代码 js2run
    前端与算法 leetcode 66. 加一
    前端与算法 leetcode 350. 两个数组的交集 II
    前端与算法 leetcode 26. 删除排序数组中的重复项
  • 原文地址:https://www.cnblogs.com/HelloMyWorld/p/6598559.html
Copyright © 2011-2022 走看看