当前位置:  编程技术>.net/c#/asp.net

基于私钥加密公钥解密的RSA算法C#实现方法

    来源: 互联网  发布时间:2014-11-02

    本文导语:  本文实例讲述了基于私钥加密公钥解密的RSA算法C#实现方法,是一种应用十分广泛的算法。分享给大家供大家参考之用。具体方法如下: 一、概述 RSA算法是第一个能同时用于加密和数字签名的算法,也易于理解和操作。 RSA是...

本文实例讲述了基于私钥加密公钥解密的RSA算法C#实现方法,是一种应用十分广泛的算法。分享给大家供大家参考之用。具体方法如下:

一、概述

RSA算法是第一个能同时用于加密和数字签名的算法,也易于理解和操作。 RSA是被研究得最广泛的公钥算法,从提出到现在已近二十年,经历了各种攻击的考验,逐渐为人们接受,普遍认为是目前最优秀的公钥方案之一。RSA的安全性依赖于大数的因子分解,但并没有从理论上证明破译RSA的难度与大数分解难度等价。
RSA的安全性依赖于大数分解。公钥和私钥都是两个大素数( 大于 100个十进制位)的函数。据猜测,从一个密钥和密文推断出明文的难度等同于分解两个大素数的积。
密钥对的产生。选择两个大素数,p 和q 。计算:
  n = p * q
然后随机选择加密密钥e(PS:最常用的e值有3,17和65537,微软就是使用的65537,采用3个中的任何一个都不存在安全问题),要求 e 和 ( p - 1 ) * ( q - 1 ) 互质。最后,利用Euclid 算法计算解密密钥d, 满足
  e * d = 1 ( mod ( p - 1 ) * ( q - 1 ) )
其中n和d也要互质。数e和n是公钥,d是私钥。两个素数p和q不再需要,应该丢弃,不要让任何人知道。
加密信息 m(二进制表示)时,首先把m分成等长数据块 m1 ,m2,..., mi ,块长s,其中 2^s = 128) blockLen = 128; else blockLen = len; block = source.Substring(i * 128, blockLen); byte[] oText = System.Text.Encoding.Default.GetBytes(block); BigInteger biText = new BigInteger(oText); BigInteger biEnText = biText.modPow(d, n); string temp1 = biEnText.ToHexString(); temp += temp1; len -= blockLen; } return temp; } /* 功能:用指定的公钥(n,e)解密指定字符串source */ private string DecryptString(string source, BigInteger e, BigInteger n) { int len = source.Length; int len1 = 0; int blockLen = 0; if ((len % 256) == 0) len1 = len / 256; else len1 = len / 256 + 1; string block = ""; string temp = ""; for (int i = 0; i < len1; i++) { if (len >= 256) blockLen = 256; else blockLen = len; block = source.Substring(i * 256, blockLen); BigInteger biText = new BigInteger(block, 16); BigInteger biEnText = biText.modPow(e, n); string temp1 = System.Text.Encoding.Default.GetString(biEnText.getBytes()); temp += temp1; len -= blockLen; } return temp; }

加密过程和解密过程代码如下所示:

/* 
 加密过程,其中d、n是RSACryptoServiceProvider生成的D、Modulus 
*/ 
private string EncryptProcess(string source, string d, string n) 
{ 
 byte[] N = Convert.FromBase64String(n); 
 byte[] D = Convert.FromBase64String(d); 
 BigInteger biN = new BigInteger(N); 
 BigInteger biD = new BigInteger(D); 
 return EncryptString(source, biD, biN); 
} 

/* 
 解密过程,其中e、n是RSACryptoServiceProvider生成的Exponent、Modulus 
*/ 
private string DecryptProcess(string source, string e, string n) 
{ 
 byte[] N = Convert.FromBase64String(n); 
 byte[] E = Convert.FromBase64String(e); 
 BigInteger biN = new BigInteger(N); 
 BigInteger biE = new BigInteger(E); 
 return DecryptString(source, biE, biN); 
}

相信本文所述对大家的C#程序设计有一定的借鉴价值。


    
 
 

您可能感兴趣的文章:

  • 实用的PHP带公钥加密类分享(每次加密结果都不一样哦)
  • c#实现md5加密示例
  • c# MD5加密的代码(简单示例,仅供学习参考)
  • C# DES加密算法中向量的作用详细解析
  • C#生成加密的16位随机数的代码
  • C#中字符串的加密的源码
  • C# 256 位 AES 加密与解密文件的实现代码
  • C#加密在实际中的应用
  • c# rsa注册实现加密文字
  • c#编写可逆加密类(3DES加密)的教程
  • c#实现加密与解密的实例代码
  • C#对字符串加密与解密的一例代码
  • C#使用伪随机数实现加密用户密码的方法
  • C#实现对AES加密和解密的方法
  • c#实现MD5 加密与解密的代码
  • C#简单的加密类实例
  • c# 图片加密解密的实例代码
  • des加密解密源码 C# key值问题分析
  • C#的3DES加密解密算法实例代码
  • c#文本加密程序代码示例
  • C#加密算法 六种C#加密算法分享
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • C#/.NET字符串加密和解密实现(AES和RSA代码举例)
  • 高手帮一下,Server用java DES加密,Client用c DES解密,c如何解密,能否给出程序!
  • 请问谁对用blowfish来做JAVA的加密解密比较熟悉,请帮忙写个文本的加密解密类,(我这有一个但是写得不很成熟不能解密)
  • 神盾加密解密教程(三)PHP 神盾解密工具
  • 如何实现在unix下delphi与java的相互加密解密??求救???
  • 文本加密解密工具 ImmediateCrypt
  • 加密解密
  • 加密解密工具包 ccrypt
  • php加密算法之实现可逆加密算法和解密分享
  • 非常着急,关于DES加密的,用java加密过的字符串,药用Linux下的C语言来解密,涉及到补位的问题,弄了几天都没有实现,有高手会的,请指点一二!!!!!!!!
  • 求Linux C 对文件进行加密解密的例子。
  • PHP的加密/解密工具 ionCube
  • 加密解密库 NaCl
  • 如何对文件内的部分内容进行加密和解密?
  • linux 可以采用crypt来加密口令,不知道有什么解密方法没有?
  • php base64加密解密的实现代码
  • VC对自定义资源加密解密(AES)的详解
  • 求 : RSA 签名 验证 以及加密解密 源代码 急用!!! 求救!!
  • 一组PHP可逆加密解密算法实例代码
  • 想做一个对字符串的加密和解密,特向各位高手请教!
  • 带密匙的php加密解密示例分享
  • WinDows8最新版文件夹加密
  • linux和unix怎么样加密口令的?为什么密码一样,加密后的不一样?
  • 请问,如何在作数据备份的时候,对打包的数据文件自动加密?然后这个密码又如何加密呢?
  • 在unix系统(freebsd)下面用md5加密中文,和win2000下用md5加密后的结果是否一样?
  • 求对称加密DES算法与非对称加密RSA算法!(可用)
  • 使用java自带des加密算法实现文件加密和字符串加密
  • 关于linux下的文件加密传输。
  • java加密算法分享(rsa解密、对称加密、md5加密)
  • DES加密的问题!!
  • 求指导~~关于文件加密的


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3