开源API链接地址:The Legion of the Bouncy Castle

Bouncy Castle,简称为BC,原本是java的一个开源JCE提供者,后来也提供了C#版本的API,我下载其编译好的DLL,在C#项目中直接引用,用其几个API,产生我指定位数的公钥和私钥(目前是1024位,但产生CA的密钥时,要2048位才能满足安全需求)。虽然开源很好很强大,但这个API就是文档很缺陷,C#的文档更是少得可怜,没办法,下载源代码慢慢看吧。。。

在接下来的几篇关于CA文章中,大体按下面链接网址的思路去整理,不过整理出来的是C#版本的实现,基本目标架设一个CA,产生用户使用的数字证书。网页链接:bouncycastle 产生证书

产生密钥,主要是用RsaKeyPairGenerator,根据参数RsaKeyGenerationParameters,产生一个密钥对,再分离出公钥和私钥,再用公钥和私钥进行加解密。

RsaKeyPairGenerator的类,类中的其他类自行加载“BouncyCastle.Crypto.dll”到VS中自行查看

  1. namespace Org.BouncyCastle.Crypto.Generators
  2. {
  3. public class RsaKeyPairGenerator : IAsymmetricCipherKeyPairGenerator
  4. {
  5. public RsaKeyPairGenerator();
  6. public AsymmetricCipherKeyPair GenerateKeyPair();
  7. public void Init(KeyGenerationParameters parameters);
  8. }
  9. }

接口IAsymmetricBlockCipher,RSA加解密算法实现的类,就是继承了该接口

  1. namespace Org.BouncyCastle.Crypto
  2. {
  3. public interface IAsymmetricBlockCipher
  4. {
  5. string AlgorithmName { get; }
  6. int GetInputBlockSize();
  7. int GetOutputBlockSize();
  8. void Init(bool forEncryption, ICipherParameters parameters);
  9. byte[] ProcessBlock(byte[] inBuf, int inOff, int inLen);
  10. }
  11. }


测试代码:

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Text;
  4. using Org.BouncyCastle.Crypto.Generators;
  5. using Org.BouncyCastle.Crypto.Parameters;
  6. using Org.BouncyCastle.Crypto;
  7. using Org.BouncyCastle.Security;
  8. using Org.BouncyCastle.Crypto.Engines;  //IAsymmetricBlockCipher engine = new RsaEngine();
  9. namespace ConsoleApplication1
  10. {
  11. class Program
  12. {
  13. static void Main(string[] args)
  14. {
  15. //RSA密钥对的构造器
  16. RsaKeyPairGenerator keyGenerator = new RsaKeyPairGenerator();
  17. //RSA密钥构造器的参数
  18. RsaKeyGenerationParameters param = new RsaKeyGenerationParameters(
  19. Org.BouncyCastle.Math.BigInteger.ValueOf(3),
  20. new Org.BouncyCastle.Security.SecureRandom(),
  21. 1024,   //密钥长度
  22. 25);
  23. //用参数初始化密钥构造器
  24. keyGenerator.Init(param);
  25. //产生密钥对
  26. AsymmetricCipherKeyPair keyPair = keyGenerator.GenerateKeyPair();
  27. //获取公钥和密钥
  28. AsymmetricKeyParameter publicKey = keyPair.Public;
  29. AsymmetricKeyParameter privateKey = keyPair.Private;
  30. if( ((RsaKeyParameters)publicKey).Modulus.BitLength<1024 )
  31. {
  32. Console.WriteLine("failed key generation (1024) length test");
  33. }
  34. //一个测试……………………
  35. //输入,十六进制的字符串,解码为byte[]
  36. //string input = "4e6f77206973207468652074696d6520666f7220616c6c20676f6f64206d656e";
  37. //byte[] testData = Org.BouncyCastle.Utilities.Encoders.Hex.Decode(input);
  38. string input = "popozh RSA test";
  39. byte[] testData = Encoding.UTF8.GetBytes(input);
  40. Console.WriteLine("明文:" + input + Environment.NewLine);
  41. //非对称加密算法,加解密用
  42. IAsymmetricBlockCipher engine = new RsaEngine();
  43. //公钥加密
  44. engine.Init(true, publicKey);
  45. try
  46. {
  47. testData = engine.ProcessBlock(testData, 0, testData.Length);
  48. Console.WriteLine("密文(base64编码):" + Convert.ToBase64String(testData) + Environment.NewLine);
  49. }
  50. catch (Exception ex)
  51. {
  52. Console.WriteLine("failed - exception " + Environment.NewLine + ex.ToString());
  53. }
  54. //私钥解密
  55. engine.Init(false, privateKey);
  56. try
  57. {
  58. testData = engine.ProcessBlock(testData, 0, testData.Length);
  59. }
  60. catch (Exception e)
  61. {
  62. Console.WriteLine("failed - exception " + e.ToString());
  63. }
  64. if (input.Equals(Encoding.UTF8.GetString(testData)))
  65. {
  66. Console.WriteLine("解密成功");
  67. }
  68. Console.Read();
  69. }
  70. }
  71. }

BC的API源代码中,以上的代码测试思路来自:csharp/crypto/test/src/crypto/test/RsaTest.cs,可以定位到该CS文件参考官方提供的测试和代码

下篇思路:生成自签的CA根证书、生成用户的证书


密钥对的保存:http://blog.csdn.net/popozhu/archive/2010/08/10/5802656.aspx

用Bouncy Castle的C#版API产生公钥和私钥的更多相关文章

  1. 在C#中保存Bouncy Castle生成的密钥对

    在用Bouncy Castle的C#版API产生公钥和私钥 中产生了一对密钥对,可以用bouncy caslte提供的API进行保存 公钥方面的3个类,具体代码根据命名空间自行查看其源代码: Org. ...

  2. Bouncy Castle Crypto API c# port

    Bouncy Castle 是一种用于 Java 平台的开放源码的轻量级密码术包.它支持大量的密码术算法,并提供 JCE 1.2.1 的实现.现在有了C#的版本.下面是网站上的介绍 This port ...

  3. Arcgis API For IOS扩展AGSDynamicLayer新旧版API对比

    AGSDynamicLayer(ForSubclassEyesOnly) Category Reference Description This category organizes the meth ...

  4. 加密 bouncy castle

    1.去官方站点下载Bouncy Castle的JCE Provider包 bcprov-ext-jdk15-145.jar 2.把jar文件复制到 $JAVA_HOME$\jre\lib\ext 目录 ...

  5. bouncy castle的配置

    Bouncy Castle 是一种用于 Java 平台的开放源码的轻量级密码术包.它支持大量的密码术算法,并提供 JCE 1.2.1 的实现.因为 Bouncy Castle 被设计成轻量级的,所以从 ...

  6. 高德地图车机版API演示程序

    高德地图车机版API演示程序 做车载的应该和这个程序打交道打的比较多吧,这里是我今天写的一个实现了他的API的一个演示程序 首先我们来看下他的官网. http://lbs.amap.com/api/a ...

  7. 基于.Net平台C#的微信网页版API

    git上有很多类似的项目,但大多都是python和js的,为了便于.Net windows平台的使用,我重构了一个.Net版本的,已整理开源 https://github.com/leestar54/ ...

  8. 【Java密码学】使用Bouncy Castle生成数字签名、数字信封

    Bouncy Castle(轻量级密码术包)是一种用于 Java 平台的开放源码的轻量级密码术包,它支持大量的密码术算法,并提供 JCE 1.2.1 的实现.最近项目上正好用到了Bouncy Cast ...

  9. 将html版API文档转换成chm格式的API文档

    文章完全转载自: https://blog.csdn.net/u012557538/article/details/42089277 将html版API文档转换成chm格式的API文档并不是一件难事, ...

随机推荐

  1. const char* <----- > string

    (1) const char*      <-----     string const char* const_txt_path=txt_path.c_str(); (2)  string  ...

  2. 神逸之作:国产快速启动软件神品ALTRun

    http://xbeta.info/altrun.htm 作者: ET民工和塞壬 日期: 2010-09-15 分类: windows 标签: quick-launch <神逸之作:国产快速启动 ...

  3. Sprint第二个冲刺(第一天)

    因为人员变动关系,我们的博客推迟了两天发布,希望老师能够谅解. 现在“广商百货”团队项目的新的团队成员组成为:董婷婷(组长).容杰龙.卓炜杰.袁文洪和吴建明 在经过第一轮和几天的休息,现在我们准备开始 ...

  4. URIEncoding和useBodyEncodingForURI详解

    之前关于编码的问题已经总结过两次了,有些地方写的很粗略.http://blog.itpub.net/29254281/viewspace-775925/http://blog.itpub.net/29 ...

  5. JS初学之-点击元素,当前的显示样式,其他变灰色

    点击按钮或者其他元素,当前的变化,其他的不变(比如选项卡按钮,点击当前的变为黄色,其他的不变色),这样的情况我们有两种思路: 1.全部清空,当前添加 for(var i=0;i<aBtn.len ...

  6. hadoop删除节点

    1.修改Master节点Hdfs-site.xml,增加dfs.hosts.exclude参数 eg: <property> <name>dfs.hosts.exclude&l ...

  7. 为什么你应该试试用Sublog写博客

    HI 这篇文章发布后,收到了一些反馈,在不同的阅读媒体上(浏览器,RSS,evernote)等,会有样式兼容问题,特别是之前的代码显示行号的实现方式,使用浮动code块,兼容问题比较严重,所以做了一个 ...

  8. 磁盘参数修订[转自vbird]

    某些时刻,你可能会希望修改一下目前文件系统的一些相关信息,举例来说,你可能要修改 Label name , 或者是 journal 的参数,或者是其他硬盘运行时的相关参数 (例如 DMA 启动与否-) ...

  9. php特殊语法--模板引擎中比较常见

    <?php $a=array(1,2,0); foreach ($a as $v): if($v>1): ?> 5 <?php endif; endforeach; ?> ...

  10. Linux下PHP+MySQL+CoreSeek中文检索引擎配置

    说明: 操作系统:CentOS 5.X 服务器IP地址:192.168.21.127 Web环境:Nginx+PHP+MySQL 站点根目录:/usr/local/nginx/html 目的:安装co ...