`
zgqynx
  • 浏览: 1365934 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

RSA 算法 java版本<转>

    博客分类:
  • java
阅读更多
原文地址:http://www.cs.princeton.edu/introcs/78crypto/RSA.java.html
另一http://www.java3z.com/cwbwebhome/article/article1/19.jsp?id=61
RSA.java

Below is the syntax highlighted version of RSA.java from §7.9 Cryptography.


/*************************************************************************
 *  Compilation:  javac RSA.java
 *  Execution:    java RSA N
 *  
 *  Generate an N-bit public and private RSA key and use to encrypt
 *  and decrypt a random message.
 * 
 *  % java RSA 50
 *  public  = 65537
 *  private = 553699199426609
 *  modulus = 825641896390631
 *  message   = 48194775244950
 *  encrpyted = 321340212160104
 *  decrypted = 48194775244950
 *
 *  Known bugs (not addressed for simplicity)
 *  -----------------------------------------
 *  - It could be the case that the message >= modulus. To avoid, use
 *    a do-while loop to generate key until modulus happen to be exactly N bits.
 *
 *  - It's possible that gcd(phi, publicKey) != 1 in which case
 *    the key generation fails. This will only happen if phi is a
 *    multiple of 65537. To avoid, use a do-while loop to generate
 *    keys until the gcd is 1.
 *
 *************************************************************************/

import java.math.BigInteger;
import java.security.SecureRandom;
    

public class RSA {
   private final static BigInteger one      = new BigInteger("1");
   private final static SecureRandom random = new SecureRandom();

   private BigInteger privateKey;
   private BigInteger publicKey;
   private BigInteger modulus;

   // generate an N-bit (roughly) public and private key
   RSA(int N) {
      BigInteger p = BigInteger.probablePrime(N/2, random);
      BigInteger q = BigInteger.probablePrime(N/2, random);
      BigInteger phi = (p.subtract(one)).multiply(q.subtract(one));

      modulus    = p.multiply(q);                                  
      publicKey  = new BigInteger("65537");     // common value in practice = 2^16 + 1
      privateKey = publicKey.modInverse(phi);
   }


   BigInteger encrypt(BigInteger message) {
      return message.modPow(publicKey, modulus);
   }

   BigInteger decrypt(BigInteger encrypted) {
      return encrypted.modPow(privateKey, modulus);
   }

   public String toString() {
      String s = "";
      s += "public  = " + publicKey  + "\n";
      s += "private = " + privateKey + "\n";
      s += "modulus = " + modulus;
      return s;
   }
 
   public static void main(String[] args) {
      int N = Integer.parseInt(args[0]);
      RSA key = new RSA(N);
      System.out.println(key);
 
      // create random message, encrypt and decrypt
      BigInteger message = new BigInteger(N-1, random);

      //// create message by converting string to integer
      // String s = "test";
      // byte[] bytes = s.getBytes();
      // BigInteger message = new BigInteger(s);

      BigInteger encrypt = key.encrypt(message);
      BigInteger decrypt = key.decrypt(encrypt);
      System.out.println("message   = " + message);
      System.out.println("encrpyted = " + encrypt);
      System.out.println("decrypted = " + decrypt);
   }
}


Copyright © 2006, Robert Sedgewick and Kevin Wayne.
Last updated: Fri Mar 10 16:22:00 EST 2006.
分享到:
评论

相关推荐

    RSA算法JAVA版

    这是用JAVA编写的RSA算法,功能比较完整,不过注意支持的数字不能太大。

    RSA算法的Java实现

    在`RSADemo`这个示例中,可能包含了完整的RSA算法Java实现,包括密钥对的生成、加密和解密的过程。你可以通过阅读和理解这个示例代码,深入学习RSA算法在实际项目中的应用。 总的来说,RSA算法在Java中的实现涉及了...

    RSA加密JAVA转C# JAVA转PHP,C#转JAVA

    RSA加密是一种非对称加密算法,广泛应用于网络安全领域,如数据传输、数字签名等。它基于大数因子分解的困难性,确保了信息的安全性。本工具提供了在不同编程语言间进行RSA密钥的互换,包括JAVA转C#、JAVA转PHP以及...

    RSA算法Java实现

    RSAPrivateKey prk = (RSAPrivateKey) b.readObject(); BigInteger d = prk.getPrivateExponent(); // 获取私钥参数及解密 BigInteger n = prk.getModulus(); System.out.println("d= " + d); System.out...

    RSA算法JAVA公钥加密,C#私钥解密

    RSA算法是一种非对称加密技术,它在信息安全领域扮演着重要的角色。非对称加密与对称加密的主要区别在于,它使用两个不同的密钥:一个公钥用于加密,另一个私钥用于解密。RSA的名字来源于它的发明者Ron Rivest、Adi ...

    Rsa.rar_RSA 算法_java 非对称 加密 算法_rsa java

    这个RAR压缩包包含了一个名为“Rsa.java”的源代码文件,可能是用于演示如何在Java环境中实现RSA算法。另一个文件“www.pudn.com.txt”可能是辅助资料,可能包含了关于算法的解释或者是一些额外的说明。 RSA算法由...

    rsa.java.rar_RSA algorithm java_RSA.java_RSA算法_java RSA_rsa java

    这个RAR压缩包提供的是一个Java实现的RSA算法示例,名为"rsa.java",适合开发者参考学习。 RSA算法的核心原理是基于两个大素数的乘积难以分解这一数学难题。它涉及到以下几个关键概念: 1. **公钥与私钥**:RSA...

    浅析用Java编程实现RSA算法的过程.pdf

    Java是一种广泛应用于网络编程领域的编程语言,而RSA算法是一种公钥密码体制,在信息安全领域占据重要地位。本文将深入探讨如何使用Java语言实现RSA加密算法的过程,以及Java语言的发展历程和特点。 Java语言...

    rsa加密算法的java实现实例

    **RSA算法简介** RSA是由Ron Rivest、Adi Shamir和Leonard Adleman在1977年提出的,是一种非对称加密算法。它基于两个密钥:公钥和私钥。公钥用于加密,而私钥用于解密。任何人都可以使用公钥对数据进行加密,但只有...

    非对称加密算法:RSA算法的C++实现与Java实现

    在Java中实现RSA算法,可以利用Java的`java.security`包,该包提供了KeyPairGenerator、PublicKey、PrivateKey等类来生成和管理密钥对,以及Cipher类用于加密和解密操作。以下是大致步骤: 1. 初始化...

    RSA加密解密java实例

    这可以通过`java.security.KeyPairGenerator`类完成,指定"RSA"作为算法,并通过`KeyPairGenerator.getInstance("RSA")`获取实例。然后调用`generateKeyPair()`生成包含公钥(PublicKey)和私钥(PrivateKey)的密钥...

    信息安全RSA算法(java)

    下面将详细介绍RSA算法的工作原理、加密与解密过程以及其在Java中的实现。 1. RSA算法原理: RSA基于大数因子分解的困难性,选取两个大素数p和q,计算它们的乘积n=p*q。接着选择一个整数e,要求1&lt;e&lt;phi(n),且e与...

    java实现RSA算法(代码)

    在Java中实现RSA算法,主要涉及到`java.security`和`javax.crypto`这两个包中的类。 1. **RSA算法原理** RSA算法的核心是欧拉定理和费马小定理。两个大素数p和q相乘得到n=p*q,计算φ(n)=(p-1)*(q-1),然后选取一...

    Java实现的RSA加密解密算法示例

    RSA算法基于大数分解难题的原理,使用公钥加密、私钥解密的方式实现信息的加密和解密。 知识点2:Java中RSA加密解密算法的实现 在Java中,可以使用Java Cryptography Architecture(JCA)来实现RSA加密解密算法。...

    RSA.rar_RSA算法_rsa_rsa java_rsa java_算法

    下面将详细介绍RSA算法的核心原理、工作流程及其在Java中的实现。 RSA算法基于数论中的两个基本概念:大整数分解和欧拉函数。其主要思想是,选取两个大素数p和q,它们的乘积n=p*q非常大,且难以分解。然后计算n的...

    RSA算法之大数实现

    java利用大整数类实现的一个RSA加解密签名过程。

    RSA加密算法实现以及C#与java互通加解密

    为了实现C#与Java之间的互通加解密,需要确保两边使用的RSA算法实现一致,包括密钥生成、填充算法及加密解密的具体实现。 - **密钥一致性**:确保C#与Java生成的公私钥对相同。 - **填充算法一致性**:两边都应采用...

    RSA实现算法报告关于RSA算法的实现代码

    ### RSA算法实现报告 #### 实验环境 - **硬件配置**:处理器:Intel(R) Core(TM) i5-2430M CPU @ 2.40GHz (4CPUs), ~2.4GHz;内存:2048MB RAM - **软件工具**: - 操作系统:Windows 7 旗舰版 - 开发工具:...

    密码学RSA算法实现代码

    Java实现RSA算法时,通常会用到`java.security`和`javax.crypto`这两个包中的类。模的重复平方算法(也称为快速幂运算)用于高效地计算大整数的幂,而中国剩余定理(Chinese Remainder Theorem, CRT)则在某些情况下...

    Java RSA加密 与.net 的密匙转换完整版,java类

    在.NET环境中,加密和解密操作同样可以使用RSA算法,但是由于密钥格式的差异,直接在Java和.NET之间进行加密解密操作可能会遇到问题。本资源提供的"Java RSA加密与.NET的密匙转换完整版,java类"解决了这个问题,...

Global site tag (gtag.js) - Google Analytics