本博文列出了.NET下常用的非对称加密算法,并将它们制作成小DEMO,希望能对大家有所帮助。

RSA
[csharp]
static string EnRSA(string data,string publickey) 

    RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();  
    byte[] cipherbytes;  
    rsa.FromXmlString(publickey);  
    cipherbytes = rsa.Encrypt(Encoding.UTF8.GetBytes(data), false);  
    return Convert.ToBase64String(cipherbytes); 
     

 
static string DeRSA(string data,string privatekey) 

    
    RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();  
    byte[] cipherbytes; rsa.FromXmlString(privatekey);  
    cipherbytes = rsa.Decrypt(Convert.FromBase64String(data), false);  
    return Encoding.UTF8.GetString(cipherbytes); 
}

调用代码
[csharp]
  Console.WriteLine("RSA非对称加密"); 
Byte[] iv = CreateKey(16); 
Byte[] key = CreateKey(27); 
string inputRSA_1 = inputString(); 
RSA rsa = RSA.Create(); 
 
string enData = EnRSA(inputRSA_1,rsa.ToXmlString(false)); 
 
 
Console.WriteLine("加密后的数据:{0}", enData); 
Console.WriteLine("解密后的数据:{0}", DeRSA(enData,rsa.ToXmlString(true)));

DSA(数字签名)
[csharp]
 static string EnDSA(string data,string publickey) 
   { 
       DSA dsa = DSA.Create(); 
       Byte[] result; 
       dsa.FromXmlString(publickey); 
       SHA1 sha1 = SHA1.Create(); 
       result = dsa.CreateSignature(sha1.ComputeHash(Convert.FromBase64String(data))); 
       return Convert.ToBase64String(result); 
 
        
   } 
 
   static bool DeDSA(string data,string privatekey,string originalData) 
   { 
       //Byte[] result; 
       DSA dsa = DSA.Create(); 
       dsa.FromXmlString(privatekey); 
       SHA1 sha1 = SHA1.Create(); 
       return dsa.VerifySignature(sha1.ComputeHash(Convert.FromBase64String(originalData)),Convert.FromBase64String(data)); 
 
   } 
调用代码
[csharp]
  Console.WriteLine("DSA数字签名"); 
string inputDSA_1 = inputString(); 
string inputDSA_2 = inputDSA_1; 
DSA dsa = DSA.Create(); 
string enData = EnDSA(inputDSA_1, dsa.ToXmlString(true)); 
 
Console.WriteLine("加密后的数据:{0}", enData); 
Console.WriteLine("解密后的数据:{0}", DeDSA(enData, dsa.ToXmlString(false), inputDSA_2));

ECDsa
[csharp]
 
static string EnECDsa(string data, CngKey key) 
 { 
     ECDsaCng ecdsa = new ECDsaCng(key); 
      
      
     SHA1 sha1 = SHA1.Create(); 
     byte[] result; 
 
     result = ecdsa.SignHash(sha1.ComputeHash(Convert.FromBase64String(data))); 
 
     return Convert.ToBase64String(result); 
 
 } 
 
 static bool DeECDsa(string data, CngKey key,string originalData) 
 { 
     ECDsaCng ecdsa = new ECDsaCng(key); 
     SHA1 sha1 = SHA1.Create(); 
 
     return ecdsa.VerifyHash(sha1.ComputeHash(Convert.FromBase64String(originalData)), Convert.FromBase64String(data)); 
 }

调用代码
[csharp]
  Console.WriteLine("ECDsa数字签名"); 
string inputDSA_1 = inputString(); 
string inputDSA_2 = inputDSA_1; 
CngKey key = CngKey.Create(CngAlgorithm.ECDsaP256); 
 
string enData = EnECDsa(inputDSA_1, key); 
 
Console.WriteLine("加密后的数据:{0}", enData); 
Console.WriteLine("解密后的数据:{0}", DeECDsa(enData, key, inputDSA_2));

.NET下的加密解密大全(3):非对称加密的更多相关文章

  1. 加密解密知识 php非对称加密

    function test1(){ $config = array( "digest_alg" => "sha1", "private_key_ ...

  2. PHP中使用OpenSSL生成RSA公钥私钥及进行加密解密示例(非对称加密)

    php服务端与客户端交互.提供开放api时,通常需要对敏感的部分api数据传输进行数据加密,这时候rsa非对称加密就能派上用处了,下面通过一个例子来说明如何用php来实现数据的加密解密 先了解一下关于 ...

  3. 使用java实现对称加密解密(AES),非对称加密解密(RSA)

    对称加密:双方采用同样的秘钥进行加密和解密.特点是速度快,但是安全性没有非对称加密高 非对称加密:接收方生成的公有秘钥公布给发送方,发送方使用该公有秘钥加密之后,发送给接收方,然后接收方使用私有秘钥解 ...

  4. 各种加密解密函数(URL加密解密、sha1加密解密、des加密解密)

    原文:各种加密解密函数(URL加密解密.sha1加密解密.des加密解密) 普通hash函数如md5.sha1.base64等都是不可逆函数.虽然我们利用php可以利用这些函数写出可逆函数来.但是跨语 ...

  5. php中des加密解密 匹配C#des加密解密 对称加密

    原文:php中des加密解密 匹配C#des加密解密 对称加密 网上找来的 php des加密解密 完全匹配上一篇C# 字符串加密解密函数  可以用于C#和php通信 对数据进行加密,其中$key 是 ...

  6. AES加密解密 助手类 CBC加密模式

    "; string result1 = AESHelper.AesEncrypt(str); string result2 = AESHelper.AesDecrypt(result1); ...

  7. .NET下的加密解密大全(2):对称加密

    本博文列出了.NET下常用的对称加密算法,并将它们制作成小DEMO,希望能对大家有所帮助. 公共代码[csharp]static byte[] CreateKey(int num) {     byt ...

  8. .NET下的加密解密大全(1): 哈希加密

    .NET有丰富的加密解密API库供我们使用,本博文总结了.NET下的Hash散列算法,并制作成简单的DEMO,希望能对大家有所帮助. MD5[csharp]using System; using Sy ...

  9. Java加密解密大全

    ChinaSEI系列讲义(By 郭克华)   Java加密解密方法大全                     如果有文字等小错,请多包涵.在不盈利的情况下,欢迎免费传播. 版权所有.郭克华 本讲义经 ...

随机推荐

  1. Java正则表达式应用总结

    http://lavasoft.blog.51cto.com/ http://lavasoft.blog.51cto.com/62575/179324      Java正则表达式应用总结   一.概 ...

  2. Android环境rm命令

    How can I execute all the possible unix(shell) commands in android programmatically? Android can't e ...

  3. HDOJ/HDU 2163 Palindromes(判断回文串~)

    Problem Description Write a program to determine whether a word is a palindrome. A palindrome is a s ...

  4. C# 关键字 default

    在泛型类和泛型方法中产生的一个问题是,在预先未知以下情况时,如何将默认值分配给参数化类型 T: T 是引用类型还是值类型. 如果 T 为值类型,则它是数值还是结构 http://msdn.micros ...

  5. android camera(二):摄像头工作原理、s5PV310 摄像头接口(CAMIF)

    一.摄像头工作原理 上一篇我们讲了摄像头模组的组成,工作原理,做为一种了解.下面我们析摄像头从寄存器角度是怎么工作的.如何阅读摄像头规格书(针对驱动调节时用到关键参数,以GT2005为例). 规格书, ...

  6. ajax_demo:GET POST发送数据

    GET,通过url发送数据 <%@ page language="java" contentType="text/html; charset=UTF-8" ...

  7. Eclipse插件收藏列表

    viPlugin 2.11.0 AnyEdit Tools 2.4.4 EclipseColorer 0.8.0 PyDev – Python IDE for Eclipse 2.7.5 MoreUn ...

  8. InetAddress Example program in Java

    The InetAddress class has no visible constructors. To create an InetAddress object, you have to use ...

  9. linux下avr单片机开发:中断服务程序

    不管是什么单片机程序,中断总是非常重要的一部分 ,linux 下的avr开发,主要是依靠avr-gcc,以及avr-libc,它们对中断程序的格式要求,与window下的icc-avr以及win-av ...

  10. Yii 安装二维码扩展Qrcode

    比如要添加 https://github.com/2amigos/yii2-qrcode-helper 生成二维码的 这个扩展第一种方法 :    1.打开根目录的composer.json, 在re ...