RSA 公钥加密算法

简介:

 RSA公钥加密算法是1977年由Ron Rivest、Adi Shamirh和LenAdleman在(美国麻省理工学院)开发的。

    这个算法的名字也是他们三个人名字首字母,RSA算法基于一个十分简单的数论事实:

    将两个大素数相乘十分容易,但想要对其乘积进行因式分解却极其困难,因此可以将乘积公开作为加密密钥。

复制代码
package rsa; 
import java.math.BigInteger; 

public class RSA { 
 private long p,q,e,d,n; 
 public RSA(){ 
  int pIndex = (int)(Math.random()*10); 
  int qIndex; 
  int eIndex; 
  do{ 
   qIndex = (int)(Math.random()*10); 
  } 
  while(qIndex==pIndex); 
  do{ 
   eIndex = (int)(Math.random()*10); 
  } 
  while(eIndex==pIndex||eIndex==pIndex); 
  p = 1033; 
  q = 2017; 
  e = 29437; 
  n = p*q; 
  d = calculateD(); 
 } 
 private long calculateD(){ 
  long t0 = 0,t1 = 1,t2 = -1; 
  long r0 = (p-1)*(q-1), m = r0,r1 = e ,r2 = -1; 
  do{ 
   long q = r0/r1; 
   r2 = r0-r1*q; 
   if(r2==0)break; 
   t2 = t0 - t1*q; 
   while(t2<0){ 
    t2+=m; 
   } 
   if(t2>=m){ 
    t2 %= m; 
   }     
   r0 = r1; 
   r1 = r2; 
   t0 = t1; 
   t1 = t2; 
  }while(r2!=0); 
  if(r1!=1){ 
   return 0; 
  } 
  else{ 
   return t2; 
  } 
 } 
  
 public long getE() { 
  return e; 
 } 
 public long getN() { 
  return n; 
 } 
 public long getD() { 
  return d; 
 } 
 public BigInteger encode(BigInteger data){ 
  return pow(data,d).mod(new BigInteger(n+"")); 
 } 
 public BigInteger decode(BigInteger code){ 
  return pow(code,e).mod(new BigInteger(n+"")); 
 } 
 public BigInteger pow(BigInteger data,long p){ 
  data = data.pow((int)p); 
  return data; 
 } 
 public static void main(String args[]){ 
  RSA rsa = new RSA(); 
   
  BigInteger data = new BigInteger("222222"); 
  long oldtime = System.currentTimeMillis(); 
  BigInteger code = rsa.encode(data); 
  long newtime = System.currentTimeMillis(); 
  double codetime = ((double)(newtime-oldtime))/1000; 
  oldtime = System.currentTimeMillis(); 
  BigInteger decode = rsa.decode(code); 
  newtime = System.currentTimeMillis(); 
  double decodetime = ((double)(newtime-oldtime))/1000; 
  System.out.println("privateKey:"+rsa.d); 
  System.out.println("publickKey:"+rsa.e); 
  System.out.println("N:"+rsa.n); 
  System.out.println("data:"+data); 
  System.out.println("code:"+code+" time:"+codetime); 
  System.out.println("decode:"+decode+" time:"+decodetime); 

 } 

}
复制代码

 本文转自Orson博客园博客,原文链接:http://www.cnblogs.com/java-class/archive/2013/04/11/3012940.html,如需转载请自行联系原作者

相关文章
|
3月前
|
存储 安全 数据安全/隐私保护
打造安全防线!Python AES&RSA加密工具,黑客绕道走的秘籍
【9月更文挑战第9天】随着数字化时代的到来,信息安全问题日益凸显。本文将介绍如何使用Python结合AES与RSA两种加密算法,构建强大的加密工具。AES以其高效性和强安全性著称,适用于大量数据的快速加密;RSA作为非对称加密算法,在加密小量数据及实现数字签名方面表现卓越。通过整合两者,可以构建既安全又灵活的加密系统。首先,需要安装pycryptodome库。接着,实现AES加密与解密功能,最后利用RSA加密AES密钥,确保其安全传输。这种设计不仅提高了数据传输效率,还增强了密钥交换的安全性,为敏感数据提供坚实保护。
243 43
|
3月前
|
安全 算法 网络安全
浅谈非对称加密(RSA)
浅谈非对称加密(RSA)
171 0
|
2月前
|
算法 安全 Go
RSA加密算法详解与Python和Go实现
RSA加密算法详解与Python和Go实现
181 1
|
2月前
|
算法 安全 网络安全
使用 Python 实现 RSA 加密
使用 Python 实现 RSA 加密
111 2
|
3月前
|
存储 安全 算法
RSA在手,安全我有!Python加密解密技术,让你的数据密码坚不可摧
【9月更文挑战第11天】在数字化时代,信息安全至关重要。传统的加密方法已难以应对日益复杂的网络攻击。RSA加密算法凭借其强大的安全性和广泛的应用场景,成为保护敏感数据的首选。本文介绍RSA的基本原理及在Python中的实现方法,并探讨其优势与挑战。通过使用PyCryptodome库,我们展示了RSA加密解密的完整流程,帮助读者理解如何利用RSA为数据提供安全保障。
152 5
|
3月前
|
安全 算法 数据安全/隐私保护
深度揭秘!Python加密技术的背后,AES与RSA如何守护你的数据安全
【9月更文挑战第10天】随着数字化时代的到来,数据安全成为企业和个人面临的重大挑战。Python 作为功能强大的编程语言,在数据加密领域扮演着重要角色。AES 和 RSA 是两种主流加密算法,分别以对称和非对称加密方式保障数据安全。AES(Advanced Encryption Standard)因其高效性和安全性,在数据加密中广泛应用;而 RSA 则利用公钥和私钥机制,在密钥交换和数字签名方面表现卓越。
91 3
|
3月前
|
存储 安全 数据库
双重防护,无懈可击!Python AES+RSA加密方案,构建最强数据安全堡垒
【9月更文挑战第11天】在数字时代,数据安全至关重要。AES与RSA加密技术相结合,构成了一道坚固防线。AES以其高效性保障数据加密,而RSA则确保密钥安全传输,二者相辅相成,提供双重保护。本文通过Python代码示例展示了这一加密方案的魅力,强调了其在实际应用中的重要性和安全性。使用HTTPS等安全协议传输加密密钥和密文,确保数据在数字世界中自由流通而无忧。
84 1
|
3月前
|
安全 数据安全/隐私保护 Python
情书也能加密?Python AES&RSA,让每一份数据都充满爱的密码
【9月更文挑战第8天】在这个数字化时代,情书不再局限于纸笔,也可能以电子形式在网络中传递。为了确保其安全,Python提供了AES和RSA等加密工具,为情书编织爱的密码。首先,通过安装pycryptodome库,我们可以利用AES对称加密算法高效保护数据;接着,使用RSA非对称加密算法加密AES密钥和IV,进一步增强安全性。即使情书被截获,没有正确密钥也无法解读内容。让我们用Python为爱情编织一张安全的网,守护每份珍贵情感。
55 2
|
3月前
|
算法 安全 网络安全
概念区分:对称加密、非对称加密、公钥、私钥、签名、证书
概念区分:对称加密、非对称加密、公钥、私钥、签名、证书
175 0
|
4月前
|
算法 JavaScript 前端开发
国标非对称加密:RSA算法、非对称特征、js还原、jsencrypt和rsa模块解析
国标非对称加密:RSA算法、非对称特征、js还原、jsencrypt和rsa模块解析
345 1

热门文章

最新文章