C# 您建议编写哪些教学玩具程序来理解证书?

C# 您建议编写哪些教学玩具程序来理解证书?,c#,.net,security,certificate,C#,.net,Security,Certificate,当我为手头问题的孤立方面编写玩具程序时,我对一些概念有了更好的理解。例如,对于加密,您可以编写一个程序来加密然后解密字符串。。确保得到初始字符串 你建议我写什么玩具程序来理解证书?(服务器/客户端交互、ssl通信、签名等)和/或我应该探索哪些.NET名称空间 (对于这个问题不重要,但我使用c#) 创建一个对称密钥并用它加密/解密某些内容。修改加密的字节[],并尝试解密它。玩不同的填充和模式,并重复几次 创建/保存/加载证书和私钥 验证证书链中找到的任何证书,以查看最常见的错误类型 创建对称密钥,

当我为手头问题的孤立方面编写玩具程序时,我对一些概念有了更好的理解。例如,对于加密,您可以编写一个程序来加密然后解密字符串。。确保得到初始字符串

你建议我写什么玩具程序来理解证书?(服务器/客户端交互、ssl通信、签名等)和/或我应该探索哪些.NET名称空间

(对于这个问题不重要,但我使用c#)

  • 创建一个对称密钥并用它加密/解密某些内容。修改加密的字节[],并尝试解密它。玩不同的填充和模式,并重复几次
  • 创建/保存/加载证书和私钥
  • 验证证书链中找到的任何证书,以查看最常见的错误类型
  • 创建对称密钥,使用一个证书(“客户端”)的公钥和另一个证书(“服务器”)的私钥对其进行加密
  • 创建一条消息,发送用“服务器”私钥加密的上述密钥,然后发送一些加密文本,并对整个过程进行签名。然后使用“服务器”公钥和“客户端”私钥对其进行解码和验证
名称空间

  • 系统安全。加密
  • 系统、安全、加密、身份验证
  • System.Security.Cryptography.X509证书
一些有趣的类型:

  • RSA加密服务提供商
  • 对称算法
  • RijndaelManaged
  • Icrypotransform
  • X509链条

    • 我不同意给出的答案。为了理解证书,您必须了解证书背后的基础设施(称为PKI,公钥基础设施)。这意味着你必须先阅读一些关于

      • 公钥加密如何工作(一般)
      • 为什么需要PKI
      • 什么是证书?我们为什么需要它
      如果你不知道这些东西背后的概念,那么编写这些东西是没有意义的

      您可以将其与加密/解密进行比较。两者都是黑匣子,用户不需要知道它(内部)如何工作才能使用它

      但是,证书和PKI是不同的。为了能够以一种实用且最安全的方式使用它们,您需要首先掌握概念(通过阅读,但不要害怕阅读一些wiki页面并在这里问一些问题会让您半途而废),然后才能编程

      评论后编辑: 是的,玩具程序在实践中总是很好地掌握了这个概念。我想到的是:

      • 执行公钥加密/解密(基本)
      • Do signature/check signature(我知道它与前一个相同,但主要不同)(基本)
      • 尝试连接到服务器并自己进行SSL握手(高级)
      • 尝试连接到服务器,获取证书并检查整个证书链的有效性(中等)
      • 尝试创建自己的自签名证书(中等)
      • 尝试使用RSA以外的其他加密算法,尝试DSA、El Gamal、椭圆曲线加密(中等)
      • 实现diffie-hellman密钥交换算法(高级)
      一旦你做完这些,我想你会对整个事情有一个合理的理解。 如果你仍然好奇,你可以深入到更高级的东西,比如数学,比如你如何作弊,算法正确性证明等等

      顺便说一句,我刚刚偶然发现了一个关于SSL/TLS的最新发现,既然您正在研究这个主题,也许您会喜欢阅读这篇小文章:


      您计划编写什么应用程序?如果它将是ASP.NET应用程序,那么您可以编写一个“Hello”,ASP.NET页面,替换从证书属性之一获取的用户。在实际应用程序中,您可以使用证书序列版本之类的东西作为数据库输入的密钥。我发现:我还不知道这是什么,但我会做一些谷歌研究。这些是该领域的初级、中级还是高级主题?顺序是从容易到“难”。每一步都会帮助你进入下一步(除了验证链的事情)。Gonzalooo!哈我没想到会在这里找到你。太好了!我会做作业,然后去波士顿评分:-)好的。。在我读了这些概念(我已经读过了)之后,你会写玩具程序来巩固你的知识吗?如果是,哪些?