• OpenSSL RSA加解密 (.Net公钥加密/ Linux端私钥解密)


    要求在.Net端生成公钥私钥对。

    然后在.Net端使用RSA公钥加密;在Linux端使用RSA私钥解密。

    最初的尝试是:.Net端使用RSACryptoServiceProvider; linux端使用OpenSSL

    搞了整整5个小时,有木有啊,有木有啊! .Net的RSA和OpenSSL对不上,有木有啊,有木有啊!

    人都搞晕了就是对不上。最后解决方式换成了,.Net端使用 OpenSSL.NET.  

    .Net端代码

    1. string publicKeyFile = context.Server.MapPath("~/App_Data/public.pem");  
    2. using( RSA rsa = RSA.FromPublicKey(BIO.File(publicKeyFile, "r")) )  
    3. {  
    4.     buffer = rsa.PublicEncrypt( buffer, RSA.Padding.OAEP);  
    5.     encryptedKey = Convert.ToBase64String(buffer);  
    6. }  



    Linux端代码

      1. BIO *b64, *bmem;  
      2.   
      3. // Base64解码  
      4. unsigned char *buffer = (unsigned char *)malloc(length);  
      5. memset(buffer, 0, length);  
      6.   
      7. b64 = BIO_new(BIO_f_base64());  
      8. BIO_set_flags(b64, BIO_FLAGS_BASE64_NO_NL);  
      9. bmem = BIO_new_mem_buf(szKey, length);  
      10. bmem = BIO_push(b64, bmem);  
      11. int len = BIO_read(bmem, buffer, length);  
      12. BIO_free_all(bmem);  
      13.   
      14.   
      15. // 加载私钥  
      16. BIO * key = NULL;   
      17. RSA * r = NULL;   
      18. key = BIO_new(BIO_s_file());   
      19. BIO_read_filename(key,  "/val/XXX/private.pem" );   
      20. r = PEM_read_bio_RSAPrivateKey(key, NULL, NULL, NULL);   
      21. BIO_free_all(key);  
      22.   
      23.   
      24. unsigned char * plainText = (unsigned char *)malloc(len);  
      25. memset( plainText, 0, len);  
      26.   
      27. // 解密  
      28. int ret = RSA_private_decrypt( RSA_size(r), buffer, plainText, r, RSA_PKCS1_OAEP_PADDING);  
      29. RSA_free(r);  
      30.   
      31.   
      32. free(plainText);  
      33. free(buffer);  

    http://blog.csdn.net/wangjia184/article/details/6941242

  • 相关阅读:
    HTML5: HTML5 WebSocket
    mfs-管理员
    java实现平面点最小距离
    java实现平面点最小距离
    java实现平面点最小距离
    java实现排他平方数
    java实现排他平方数
    java实现排他平方数
    java实现排他平方数
    java实现排他平方数
  • 原文地址:https://www.cnblogs.com/findumars/p/7460380.html
Copyright © 2020-2023  润新知