当前位置: 首页 > 知识库问答 >
问题:

带传输的C#RSA加密/解密

夏侯腾
2023-03-14

我在网络上看到了大量使用System.Security.Cryptography.RSacryptoServiceProvider的C#加密/解密教程和示例,但我希望能够做到的是:

    null

谁能给我指出一个有用的资源吗?

共有1个答案

郑燕七
2023-03-14

这方面的例子真的够多了,但不管怎样,给你

using System;
using System.Security.Cryptography;

namespace RsaCryptoExample
{
  static class Program
  {
    static void Main()
    {
      //lets take a new CSP with a new 2048 bit rsa key pair
      var csp = new RSACryptoServiceProvider(2048);

      //how to get the private key
      var privKey = csp.ExportParameters(true);

      //and the public key ...
      var pubKey = csp.ExportParameters(false);

      //converting the public key into a string representation
      string pubKeyString;
      {
        //we need some buffer
        var sw = new System.IO.StringWriter();
        //we need a serializer
        var xs = new System.Xml.Serialization.XmlSerializer(typeof(RSAParameters));
        //serialize the key into the stream
        xs.Serialize(sw, pubKey);
        //get the string from the stream
        pubKeyString = sw.ToString();
      }

      //converting it back
      {
        //get a stream from the string
        var sr = new System.IO.StringReader(pubKeyString);
        //we need a deserializer
        var xs = new System.Xml.Serialization.XmlSerializer(typeof(RSAParameters));
        //get the object back from the stream
        pubKey = (RSAParameters)xs.Deserialize(sr);
      }

      //conversion for the private key is no black magic either ... omitted

      //we have a public key ... let's get a new csp and load that key
      csp = new RSACryptoServiceProvider();
      csp.ImportParameters(pubKey);

      //we need some data to encrypt
      var plainTextData = "foobar";

      //for encryption, always handle bytes...
      var bytesPlainTextData = System.Text.Encoding.Unicode.GetBytes(plainTextData);

      //apply pkcs#1.5 padding and encrypt our data 
      var bytesCypherText = csp.Encrypt(bytesPlainTextData, false);

      //we might want a string representation of our cypher text... base64 will do
      var cypherText = Convert.ToBase64String(bytesCypherText);


      /*
       * some transmission / storage / retrieval
       * 
       * and we want to decrypt our cypherText
       */

      //first, get our bytes back from the base64 string ...
      bytesCypherText = Convert.FromBase64String(cypherText);

      //we want to decrypt, therefore we need a csp and load our private key
      csp = new RSACryptoServiceProvider();
      csp.ImportParameters(privKey);

      //decrypt and strip pkcs#1.5 padding
      bytesPlainTextData = csp.Decrypt(bytesCypherText, false);

      //get our original plainText back...
      plainTextData = System.Text.Encoding.Unicode.GetString(bytesPlainTextData);
    }
  }
}

作为附带说明:对Encrypt()和Decrypt()的调用有一个bool参数,该参数在OAEP和PKCS#1.5填充之间切换...如果在您的情况下OAEP可用,您可能希望选择OAEP

 类似资料:
  • 本文向大家介绍详解Android端与JavaWeb传输加密(DES+RSA),包括了详解Android端与JavaWeb传输加密(DES+RSA)的使用技巧和注意事项,需要的朋友参考一下 一、加密介绍 本文采用对称式加密算法DES和非对称式加密算法RSA结合做数据传输加密的方式。 先说一下对称式加密 DES:对称式加密即使用单钥密码加密的方法,信息的加密和解密使用同一个秘钥,这种方式也称为单秘钥加

  • 本文向大家介绍Golang加密解密之RSA(附带php),包括了Golang加密解密之RSA(附带php)的使用技巧和注意事项,需要的朋友参考一下 RSA加密算法简史   RSA是1977年由罗纳德·李维斯特(Ron Rivest)、阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)一起提出的。当时他们三人都在麻省理工学院工作。RSA就是他们三人姓氏开头字母拼在

  • 我们封装了一个RSA 加解密的工具放在 extends 中。首先看看它的文件结构 rsa |-- RSACrypt 加解密主程序 |-- RSACryptBigData 大数据加解密 |-- SignUtil 签名类 |-- rsa_public_key.pem 公钥 |-- rsa_private_key.pem 私钥 RSACrypt API RSAC

  • 我当前在解密服务器上的RSA加密数据时遇到了问题,服务器使用Node.js并使用node-rsa库进行加密/解密。 在我的Android客户端上没有任何问题地接收到公钥,但是当尝试解密数据时,我得到了以下异常: 这就是我在客户端上生成公钥的方式 以下是客户端的加密:

  • 所以,接下来我需要的是: 创建用于开发的证书,分别为客户端和服务器获取一个证书 通过从客户端编码并在服务器上解码的API检索密码 现在,我按照这个链接创建了certifiactes。那里的女孩一步一步地给出了如何获得自己签名的证书、将其存放在商店等方面的指导。现在,我有问题的部分是: 真的会有人帮我。