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));
    

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

  • 相关阅读:
    2019牛客暑期多校训练营(第七场)
    2019 Multi-University Training Contest 6
    2019 Multi-University Training Contest 5
    SDU暑期集训排位(4)
    2019牛客暑期多校训练营(第六场)
    poj3252 Round Numbers(数位dp)
    hdu3555 Bomb(数位dp)
    BM求线性递推模板(杜教版)
    hdu3746 Cyclic Nacklace(kmp)
    kmp next数组的模板
  • 原文地址:https://www.cnblogs.com/HelloMyWorld/p/6598559.html
Copyright © 2011-2022 走看看